私はおそらくpartial
、(関数とその引数を持つある種の構造体の代わりに) ループできる引数のない関数を作成するために使用します。
functions = [
functools.partial(func1, arg1a, arg1b),
functools.partial(func2),
functools.partial(func3, keyword_a=kwarg3a, keyword_b=kwarg3b)
]
次に、それを a に入れてlist
反復する代わりに、次のように呼び出すことができますall
。
retval = all(func() for func in (
functools.partial(func1, arg1a, arg1b),
functools.partial(func2),
functools.partial(func3, keyword_a=kwarg3a, keyword_b=kwarg3b)
))
これはFalse
、関数の 1 つが返されるとすぐに返されるFalse
か (または false-y の場合)、すべての関数を実行して、すべてが返されたTrue
場合True
(または true-y の場合) に返されます。ドキュメントが言うように、それは次と同等です:
def all(iterable):
for element in iterable:
if not element:
return False
return True
partial
s を他の回答の sと比較する価値がtuple
あります。これらは、定義方法と呼び出し方法の両方で疑似パーシャルとして機能します。
f1 = functools.partial(func, arg1, arg2, kw1=kwarg1, kw2=kwarg2)
f2 = (func1, (arg1a, arg1b), {'kw1': kwarg1, 'kw2': kwarg2 })
f1()
f2[0](*f2[1], **f2[2])
明らかに、タプルアンパッキングを使用して呼び出しを読みやすくすることができます (また、aemdy の回答がそうであるように、そうすべきです) が、実際のパーシャルを使用するほど単純になることはありません。