Python:如何将函数作为参数传递给另一个函数?

时间:2013-02-02 23:04:06

标签: python function arguments

我有2个自定义功能:

f(), g()

我想将所有月份传递给他们,并将其他功能传递给他们,如下所示:

x(f("Jan"), g("Jan"), f("Feb"), g("Feb"), f("Mar"), g("Mar"), ...)

如何以简短的方式完成?

最好的问候

1 个答案:

答案 0 :(得分:5)

首先,我们要在列表的每个项目上调用f()g()。我们可以使用list comprehension

执行此操作
[(f(month), g(month)) for month in months]

这会产生一个元组列表,但是我们需要一个平面列表,所以我们使用itertools.chain.from_iterable()来展平它(或者在这种情况下,只是一个生成器表达式):

from itertools import chain

chain.from_iterable((f(month), g(month)) for month in months)

然后我们将unpack迭代到x()

的参数中
x(*chain.from_iterable((f(month), g(month)) for month in months))

编辑:如果您希望传递准备好使用该参数执行的函数,而不执行它们,则functools.partial()为救援:

from functools import partial

[(partial(f, month), partial(g, month)) for month in months]

这意味着x()的参数将是一个函数,在调用时,根据需要运行f()g(),并将月份填充为部分。当然,这可以像以前一样扩展出来。