空でないシーケンスに対するイテレータは、フィルタリングも集計も行わず (sum()
など)、何も生成しないのはなぜでしょうか?
簡単な例を考えてみましょう:
sequence = ['a', 'b', 'c']
list((el, ord(el)) for el in sequence)
これで期待通りの結果が得[('a', 97), ('b', 98), ('c', 99)]
られます。
ord(el)
ここで、 out を、いくつかのジェネレーターから最初の値を取得する式に交換するだけです(...).next()
— 不自然な例を許してください:
def odd_integers_up_to_length(str):
return (x for x in xrange(len(str)) if x%2==1)
list((el, odd_integers_up_to_length(el).next()) for el in sequence)
これにより が得られ[]
ます。ええ、空のリストです。('a',
スタッフ)
タプルはありません。何もない。
ただし、フィルター処理、集計、削減は行っていません。n
フィルタリングや集計を行わないオブジェクトに対するジェネレータ式は、オブジェクトを生成する必要がありn
ますよね? どうしたの?