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次。
有没有办法完成这个而不必通过“测试”重复而不是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。)

翻译自:https://stackoverflow.com/questions/13783211/python-how-to-pass-an-argument-to-a-function-pointer-parameter

转载注明原文:Python,如何将参数传递给函数指针参数?