这个问题在这里已有答案:
我有这个函数f(x,a,b):
def f(x, a, b):
return a*x + b
我必须将此函数传递给另一个预先设置为'a'和'b'的函数,例如:
def print2(f):
x = np.linspace(0,1,10)
print(f(x))
print2(f( , 1, 1))
我知道还有其他方法可以解决这个特定的问题,但这只是一个例子,而不是真正的问题,我想知道是否还有做这样的事情“print2(f(,1,1) )”。换句话说,无论如何都要做到这一点,而不必一直通过参数?喜欢,
def print3(f, a, b):
x = np.linspace(0, 1, 10)
print(f(x, a, b))
print3(f, a, b)
你可以准确地使用functools.partial!
def print2(f):
x = np.linspace(0,1,10)
print(f(x))
f2 = functools.partial(f, a=1, b=2)
print2(f2)
对于使用partial获得的许多可能的优点,请参阅this。
简而言之:
还有很多...
你可以把它包装在另一个函数中:
g = lambda x: f(x, 1, 1)
print2(g)
无论需要提供什么数据,都要创建外部函数的参数,然后传递数据。
我被告知这种方法在Python中并不理想。 @Bharel的回答可能更合适。
lambda
和partial
都是创造新功能的奇特方式。你也可以自己写一下:
def f2(x):
return f(x, 1, 1)
是什么让lambda
和partial
特别之处在于它们是表达式,可以直接作为参数传递给高阶函数。