将函数及其一个参数传递给Python中的另一个函数

时间:2014-01-22 14:53:31

标签: python function arguments

我现在尝试将多变量函数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中是否有类似内容?我试图在网上搜索,但我不太熟悉这个特定问题的英文措辞,所以没有运气。

4 个答案:

答案 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

<强>优点:

  1. 我们可以动态决定调用哪个函数

  2. 我们甚至可以在调用时更改默认参数。

答案 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")