一般的に言えば、次のように言うのは Python の哲学の範囲内です。中間結果を再利用したい場合は、名前を付けてください。慣用 _
的に、一時的な名前を提案するために使用されます。また、リスト内包表記またはジェネレータ式が 2 行以上にまたがる場合は、とにかく明示的な for ループで書き直すのがおそらく最善です。
とは言うものの、Python の関数機能を (誤って) 使用して、中間名なしでコードを作成する可能性があります。ほぼ、つまり: を使用functools.partial
して左端およびキーワード以外の引数を固定することはできないため、 を使用するmod2
代わりに、関数を自分で作成する必要がありpartial
ます。
from itertools import iterfalse, product, starmap
from operator import mod, mul
mod2 = lambda x: mod(x, 2) # this would be nicer with functools.partial
max(filterfalse(mod2, starmap(mul, product(range(100, 1000), repeat=2))))
ただし、上記のコードがあなたの質問に答えると信じていますが、この解決策は直感的に理解できるとは思いません。中間結果に名前を付けてください。