Python yieldとは



RubyやPythonのソースを読んでいると、

yield


という表記を見かけます。

よくわかっていなかったので、調べてみました。


def yeildtest():
  for i in range(10):
    yield i*10

if __name__ == '__main__':
  for j in yeildtest():
    print j
    print '-----'

# 実行結果
# 0
# -----
# 10
# -----
# 20
# -----
# 30
# -----
# 40
# -----
# 50
# -----
# 60
# -----
# 70
# -----
# 80
# -----
# 90
# -----


yieldが呼び出されると、一旦メソッドを終了し、
呼び出し元に値を返すんですね・・・

xmlを解析しながら、オブジェクトを生成。
ひとまとまりのオブジェクトが生成できたら、
yieldで生成したオブジェクトを呼び出し元に返す。

なんて使い方が考えられるでしょうか。



もう一つ試してみました。


def yeildtest():
  print 'start'
  for i in range(10):
    yield i*10
  print 'end'

if __name__ == '__main__':
  for j in yeildtest():
    print j


# start
# 0
# 10
# 20
# 30
# 40
# 50
# 60
# 70
# 80
# 90
# end


メソッドの開始と終了に呼び出したいメソッドを
確実に呼び出せるので、
DB接続
フェッチしてデータを取得したらyieldで呼び出し元に返却
DB切断

という使い方もできそうです。




もどる