私は2つのカスタム関数を持っています:
f(), g()
すべての月をそれらに渡し、次のように別の関数を渡したい:
x(f("Jan"), g("Jan"), f("Feb"), g("Feb"), f("Mar"), g("Mar"), ...)
短い方法でどのように行われますか?
よろしくお願いします
したがって、まず、リストの各項目に対してf()
andを呼び出します。リスト内包表記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)
次に、このiterableを の引数に展開します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()