は以下がitertools.productは引数を遅延評価しますか?
のPython 3.6でfrom itertools import product, count
for f in product(count(), [1,2]):
print(f)
を何かを印刷したことがない代わりに、それはただそこに座って、CPUを燃やします。問題は、product
が最初に完全であると評価されるため、無限の領域を超えている場合には、反復子を返さないということです。 product
がジェネレータであると仮定すると、これは驚くべきことです。
私は、(無限に)カウントアップを開始するには、この発電機(directly from the docsをとら)の行動のようなもの、これを期待しているでしょう:
for tup in ((x,y) for x in count() for y in [1,2]):
print(tup)
をしかし、私の発電機がproduct
を使用して1、すぐにカウント決して開始していないのに対し、まったくカウントする。
他のツールitertools
は私が期待していることをします。たとえば、次のようになります。
for f in takewhile(lambda x: True, count()):
print(f)
takewhile
が遅延であるため、数値ストリームが出力されます。
DeepSpaceの答えは間違っています:私が知る限り、製品はそれほど怠惰ではありません。 – Shep