0

我有 2 个自定义函数:

f(), g()

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

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

它是如何在短时间内完成的?

最好的祝福

4

1 回答 1

5

因此,首先,我们要在列表的每个项目上调用f()g()。我们可以通过列表推导来做到这一点:

[(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)

然后我们将这个可迭代对象解包到参数中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]

这意味着参数 tox()将是函数,当调用时,运行f()g()在适当的情况下,按给定的部分填充月份。当然,这可以像以前一样扩展。

于 2013-02-02T23:06:32.483 回答