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

alw*_*btc 0 python arguments function

我有2个自定义功能:

f(), g()
Run Code Online (Sandbox Code Playgroud)

我想将所有月份传递给他们,并传递给他们另一个函数,如下所示:

x(f("Jan"), g("Jan"), f("Feb"), g("Feb"), f("Mar"), g("Mar"), ...)
Run Code Online (Sandbox Code Playgroud)

它是如何做到的?

最好的祝福

Gar*_*tty 5

所以,首先,我们要调用f(),并g()在列表中的每个项目.我们可以通过列表理解来做到这一点:

[(f(month), g(month)) for month in months]
Run Code Online (Sandbox Code Playgroud)

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

from itertools import chain

chain.from_iterable((f(month), g(month)) for month in months)
Run Code Online (Sandbox Code Playgroud)

然后我们将这个iterable 解压缩到参数中x():

x(*chain.from_iterable((f(month), g(month)) for month in months))
Run Code Online (Sandbox Code Playgroud)

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

from functools import partial

[(partial(f, month), partial(g, month)) for month in months]
Run Code Online (Sandbox Code Playgroud)

这意味着参数x()将是函数,当被调用,运行f()g()适当时,月份填充为部分.当然,这可以像以前一样扩展.

  • @alwbtc这一切都来自经验,你做的越多,你需要的东西就越多,所以学的越多.标准的Python文档也很棒,值得一读. (3认同)