我才刚刚开始学习Python,发现我可以将一个函数作为另一个函数的参数来传递。现在,如果我调用foo(bar())
它,它将不作为函数指针传递,而是作为所使用函数的返回值传递。调用foo(bar)
将传递该函数,但是通过这种方式,我无法传递任何其他参数。如果我想传递调用的函数指针bar(42)
怎么办?
我希望能够重复一个函数,而不管我传递给它什么参数。
def repeat(function, times):
for calls in range(times):
function()
def foo(s):
print s
repeat(foo("test"), 4)
在这种情况下,该函数foo("test")
应该连续调用4次。有没有一种方法可以不必通过“测试”来repeat
代替foo
?
您可以使用lambda
:
repeat(lambda: bar(42))
或functools.partial
:
from functools import partial
repeat(partial(bar, 42))
或分别传递参数:
def repeat(times, f, *args):
for _ in range(times):
f(*args)
这种最终样式在标准库和主要的Python工具中非常普遍。*args
表示可变数量的参数,因此您可以将该函数用作
repeat(4, foo, "test")
要么
def inquisition(weapon1, weapon2, weapon3):
print("Our weapons are {}, {} and {}".format(weapon1, weapon2, weapon3))
repeat(10, inquisition, "surprise", "fear", "ruthless efficiency")
请注意,为方便起见,我将重复次数放在前面。如果要使用该*args
构造,它不能是最后一个参数。
(为完整起见,您还可以添加关键字参数**kwargs
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句