pocari @Wiki ジェネレータ



更新履歴
取得中です。

※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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文まで
実行して値を返す。