Python,如何将参数传递给函数指针参数?

拜占庭

我才刚刚开始学习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

弗雷德·富(Fred 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章