yieldって何だ
ふーん。PythonのyieldとRubyのyieldって全然意味が違う(はず)なのに、結果的によく似たソースになっているのが面白い。
>>> def f(): for i in range(10): yield i >>> g = f() >>> g <generator object at 0x00CB8CD8> >>> dir(g) ['__class__', '__delattr__', '__doc__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'gi_frame', 'gi_running', 'next'] >>>
yieldはgeneratorオブジェクトを返します。ここからはあんまり自信ないですが、generatorはイテレータの一種(?)というか、nextメソッドと__iter__メソッドがあればなんでもイテレータなんですよね。
で、あとgeneratorはコンテキストも保持しているのではないかと。gi_frameというのがあやしいですね。
わわ、見つけましたよ。g.gi_frame.f_localsというのがあります。
>>> g.gi_frame.f_locals {'i': 0} >>> g.next() 1 >>> g.gi_frame.f_locals {'i': 1}
ところで、Pythonの勉強は進んでいるといっていいのだろうか、、、