Pythonのジェネレータは、めっちゃ便利。
ゲームプログラミングでも便利。
windows上のゲームプログラミングでは、
メッセージループの中でプログラムを進行させていかないといけないので、FSMを書くことになってしまいがち。
スレッドを使うことで、whileループをまわしたりもできるようになるが、スレッドをわざわざ使わないでも、
pythonのジェネレータを使うことで、マイクロスレッド、
コルーチン(正確には半コルーチン)のようなものを
超簡単に実装できる。
Pythonでは、return文の代わりにyield文を使うことで、
ジェネレータを、めっちゃ簡単に生成できる。
概念説明するより、具体例を見た方が簡単なので、どうぞ。
#--------------------------
def gen(n):
yield n
n+=1
yield n
n*=2
yield n
g=gen(2)
print g.next(),g.next(),g.next()
#--------------------------
で、
2 3 6
という出力になる。
yield文は、return文と同じように値を返す。
が、そこで関数は一時停止状態になり、
次にnext()で呼ばれると、また前回のyield文の直後から、
ローカル変数の状態などを継続して次のyield文まで
実行して値を返す。
最終更新:2005年10月17日 14:29