我现在尝试将多变量函数F(x, y, z)
作为Python中另一个函数G(F, x)
的参数传递。如上所述,函数G中的两个参数是函数F和F的变量x之一。换句话说,我想要做的不是将F作为三变量函数传递,而是将其作为单个变量函数传递,该函数仅依赖于x。在调用G之前已经分配了y和z的值。
在Matlab中,这只需通过以下方式完成:
G((@x) F(x, y, z));
我想知道Python中是否有类似内容?我试图在网上搜索,但我不太熟悉这个特定问题的英文措辞,所以没有运气。
答案 0 :(得分:5)
也可以使用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
修改强>
对不起,我忘了在@thefourtheye的回答中复制包含 adder 的功能<我是懒惰:))
def adder(x, y, z):
return x + y + z
答案 1 :(得分:5)
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)
答案 2 :(得分:3)
你可以使用Python闭包和function currying technique,就像这样
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
<强>输出强>
35
55
100
24
<强>优点:强>
我们可以动态决定调用哪个函数
我们甚至可以在调用时更改默认参数。
答案 3 :(得分:1)
它可以像这个一样简单
def F(x,y,z):
print "x=",x
print "y=",y
print "z=",z
def G(func,x):
func(x,"G's Y", "G's Z")
G(F,"Main's X")