gpt4 book ai didi

Python:将带有参数的函数传递给函数

转载 作者:太空宇宙 更新时间:2023-11-03 16:49:40 25 4
gpt4 key购买 nike

我有两个功能:

  1. 我无法更改的库函数lib_func( func, param1)
    lib_func 采用函数 func 和其他一些参数 param1 作为参数。

  2. 用户定义函数user_func

例如:

x = 0
y = 0
def user_func():
global x
global y
return sqrt(x*y)

现在的问题是我想将 x 作为参数而不是全局变量传递给 user_func,同时将 user_func 传递给 lib_func

最佳答案

函数只是一个可以调用的对象,因此使用 __call__ 方法定义类原则上等同于定义函数。至少在您给出的上下文中。

所以:

def user_func(x, y, z):
return anything_with(x, y, z)

相当于:

class user_class(object):
@staticmethod # staticmethod so that it can be called on the class
def __call__(x, y, z):
return anything_with(x, y, z)

就目前情况而言,这只是混淆。但是,当您创建具有预定义属性的实例并且仅将变量参数指定为调用的参数时,神奇的事情就会发生:

class user_class(object):
def __init__(self, x):
self.x = x

def __call__(self, y, z): # No x as parameter!
return do_anything_with(self.x, y, z) # use the predefined x here

但是您需要更改调用 lib_func 的方式:

x = 0
user_class_instance = user_class(0)
result = lib_func(user_class_instance, param1)

因此它将重复调用具有不同yz的实例,但x将保持不变

<小时/>

但是,大多数此类 lib_func 函数都允许传递可变参数(例如将传递给 user_func),例如 scipy.optimize.curve_fit :

curve_fit(user_func, x, y, [initial_guess_param1, param2, ...])

user_func 将由 curve_fit 在内部调用(您不必执行任何操作!),例如:

user_func(x, initial_guess_param1, param2, ...)
# Then curve-fit modifies initial_guess_param1, param2, ... and calls it again
user_func(x, initial_guess_param1, param2, ...)
# and again modifies these and calls again
user_func(x, initial_guess_param1, param2, ...)
# ... until it finds a solution

调用curve_fit时定义了xy并且不改变,但在查找时initial_guess_param1将被改变最佳curve_fit.

关于Python:将带有参数的函数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35981489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com