如何在存储函数时传递预定义的参数

时间:2014-11-10 21:09:50

标签: python arguments

是否可以存储具有预定义参数的函数以供另一个函数调用?

例如:

def function(num):
    print num

trigger=function #store function(1)
trigger()        #prints 1

trigger=function #store function(2)
trigger()        #prints 2

触发调用存储的任何内容而不传递任何参数。我可以更改触发器,但这需要我重写调用触发器的函数,所以我想知道在将函数存储在变量中时是否有办法存储函数和参数。

2 个答案:

答案 0 :(得分:6)

您正在寻找functools.partial

>>> import functools
>>> def foo(number):
...     print number
... 
>>> bar = functools.partial(foo, 1)
>>> bar()
1

答案 1 :(得分:2)

有人已经提到functools.partial这是首选,但您也可以使用不带参数的lambda函数:

trigger1 = lambda: function(1)
trigger2 = lambda: function(2)

注意:正如有人提到的那样,要小心在循环中定义这样的函数,或者引用可能会改变的lambda体中的任何值。

你最终会遇到这样的情况:

a = []
for i in range(5):
    a.append(lambda: i)

b = [func() for func in a]
# equals [4, 4, 4, 4, 4]

# to avoid this, do a.append(lambda i=i: i)