pythonのジェネレータをリスト内包表記的に書く
2013-09-06 追記
強化記事(?)書きました。 pythonのリスト内包表記は凄い。すごく凄い。
ジェネレータってやつがあるじゃないですか。
def nums(step=1): i = 0 while True: yield i i += step for i in nums(): print i
ってやると延々とカウントアップする、みたいなやつね。 メモリ消費が最小限で済む(+上記のような無限の配列も扱える)ので、もの凄い大きな配列とかに便利。
で、このジェネレータ。聞けばジェネレータ式というのがあるらしい。
リスト内包表記だと
[i*2 for i in range(100)]
みたいにやるのを
(i*2 for i in range(100))
とするだけ。
めっちゃ楽ちん。素敵。 もちろんこいつは入れ子にも出来る。便利だねー、いいねー。
ちなみに、ジェネレータオブジェクトを関数に渡したりする時は、括弧を省略できるみたいです。
sum(i*2 for i in range(100))
ではなく、
sum((i*2 for i in range(100)))
とすることが可能、ということ。括弧が一個少ない。