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切断
という使い方もできそうです。
もどる