我有两个自定义函数:
f(), g()我希望将所有月份传递给它们,并按如下方式传递另一个函数:
x(f("Jan"), g("Jan"), f("Feb"), g("Feb"), f("Mar"), g("Mar"), ...)如何在短时间内做到这一点?
诚挚的问候
发布于 2013-02-03 07:06:32
因此,首先,我们要对列表中的每一项调用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()的函数,并将月份填充为partial。当然,这可以以与以前相同的方式扩展。
https://stackoverflow.com/questions/14667495
复制相似问题