是否可以存储具有预定义参数的函数以供另一个函数调用?
例如:
def function(num):
print num
trigger=function #store function(1)
trigger() #prints 1
trigger=function #store function(2)
trigger() #prints 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)