2015-02-06 146 views
3

我有一个Python函数f(a, b),我试图定义一个新函数g,其中带有一个参数f已经设置,如g(f(a = 5))。这将是一个简单的例子:使用默认参数传递函数

def sum(a, b): 
    return a+b 

def g(x, f): 
    return f(x) 

而且我希望能够评估g(5, sum(b=0))。我怎么做?

+0

不知道我下面,什么是错用'高清F( x):return g(5,x)'? – amit 2015-02-06 05:59:45

+0

'sum(b = 0)'这是什么意思?在这种情况下,“a”是什么? – Marcin 2015-02-06 06:08:35

+3

FWIW,使用'sum'作为你自己的函数的名字是一个坏主意,因为已经有一个带有这个名字的内置函数。 – 2015-02-06 06:56:09

回答

6

使用functools.partial

g(5, partial(sum, b=5)) 

返回,要求将像FUNC称为与位置参数ARGS和关键字参数关键字当一个新的部分对象。如果更多的参数被提供给该呼叫,它们将附加到参数。如果附加的关键字参数被提供,它们延伸并覆盖关键字

局部()被用于部分功能的应用程序,“冻结”的函数的参数和/或关键字产生一个新的对象具有简化一些部签名。例如,部分()可用于创建行为等,其中基本参数默认为两个INT()函数可以调用的:

basetwo = partial(int, base=2) 
+0

非常感谢!精美的作品。 – mirunix 2015-02-06 06:18:55