How to pass a function with some (but not all) arguments to another function?
本问题已经有最佳答案,请猛点这里访问。
我有这个函数f(x,a,b):
1 2 | def f(x, a, b): return a*x + b |
我必须将此函数传递给另一个预先设置为'a'和'b'的函数,例如:
1 2 3 4 5 | def print2(f): x = np.linspace(0,1,10) print(f(x)) print2(f( , 1, 1)) |
我知道还有其他方法可以解决这个特定的问题,但这只是一个例子,而不是真正的问题,而且我想知道是否还有做类似这样的事情"print2(f(,1,1))"。 换句话说,无论如何都要做到这一点,而不必一直通过参数? 喜欢,
1 2 3 4 | def print3(f, a, b): x = np.linspace(0, 1, 10) print(f(x, a, b)) print3(f, a, b) |
你可以完全使用functools.partial!
1 2 3 4 5 | def print2(f): x = np.linspace(0,1,10) print(f(x)) f2 = functools.partial(f, a=1, b=2) print2(f2) |
对于使用partial获得的许多可能的优点,请参阅此内容。
简而言之:
- 部分允许内省,您可以知道您设置值的内容。
- 在许多领域的标准库中都支持部分,并且由asyncio等模块推荐。
- 与lambda不同,部分可以腌制。
- 部分是完全固定的,不需要使用可能导致固定改变的闭合变量。
- 部分执行速度更快。
还有很多...
你可以把它包装在另一个函数中:
1 2 3 | g = lambda x: f(x, 1, 1) print2(g) |
无论需要提供什么数据,都要创建外部函数的参数,然后传递数据。
我被告知这种方法在Python中并不理想。 @Bharel的回答可能更合适。
1 2 | def f2(x): return f(x, 1, 1) |
使