我有这个函数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)
答案 0 :(得分:2)
您可以完全使用 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。
简而言之:
还有更多...
答案 1 :(得分:1)
您可以将其包装在另一个函数中
g = lambda x: f(x, 1, 1)
print2(g)
使外部函数的参数仍然需要提供任何数据,然后将该数据传递通过。
有人告诉我,这种方法在Python中并不理想。 @Bharel的答案可能更合适。
答案 2 :(得分:0)
lambda
和partial
都是创建新函数的理想方法。您也可以自己编写:
def f2(x):
return f(x, 1, 1)
lambda
和partial
的独特之处在于它们是表达式,可以作为参数直接传递给高阶函数。