0

私は2つのカスタム関数を持っています:

f(), g()

すべての月をそれらに渡し、次のように別の関数を渡したい:

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

短い方法でどのように行われますか?

よろしくお願いします

4

1 に答える 1

5

したがって、まず、リストの各項目に対して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()

于 2013-02-02T23:06:32.483 に答える