cip*_*lla 6 python arguments function
我现在试图将多变量函数F(x, y, z)作为G(F, x)Python 中另一个函数的参数传递.如上所述,函数G中的两个参数是函数F和F的变量x之一.换句话说,我想要做的不是将F作为三变量函数传递,而是将其作为单个变量函数传递,该函数仅依赖于x.在调用G之前已经分配了y和z的值.
在Matlab中,这只需通过以下方式完成:
G((@x) F(x, y, z));
Run Code Online (Sandbox Code Playgroud)
我想知道Python中是否有类似的东西?我试图在网上搜索,但我对这个特定问题的英语措辞不太熟悉,所以没有运气.
也可以使用functools.partial完成
In [158]:from functools import partial
In [159]: adder_w = partial(adder, y=5, z=10)
In [160]: adder_w(2)
Out[160]: 17
Run Code Online (Sandbox Code Playgroud)
编辑:
对不起,我忘了在@thefourtheye的回答中包含复制的功能加法器(我很懒:)
def adder(x, y, z):
return x + y + z
Run Code Online (Sandbox Code Playgroud)
lambda适合这种情况.
def G(func, x):
return func(x)
def F(x, y, z):
return x+y+z
print G(lambda x: F(x, 1, 2), 3)
Run Code Online (Sandbox Code Playgroud)
你可以使用 Python 闭包和函数柯里化技术来做到这一点,就像这样
def adder(x, y, z):
return x + y + z
def wrapper_g(y, z):
def g(f, x, y = y, z = z):
return f(x, y, z) # By closure property, `f` accesses `y` and `z`
return g
g = wrapper_g(5, 10) # We are creating `g` with default parameters 5 and 10
print g(adder, 20) # along with the third parameter 20, adder is called.
print g(adder, 40) # along with the third parameter 40, adder is called.
print g(multiplier, 2) # We can pass any function, which can act on 2 params.
print g(multiplier, 2, y = 3, z = 4) # We can dynamically alter the default param
Run Code Online (Sandbox Code Playgroud)
输出
35
55
100
24
Run Code Online (Sandbox Code Playgroud)
优点:
我们可以动态决定调用哪个函数
我们甚至可以在调用时更改默认参数。