ページへ戻る
印刷
Python/yieldでループを効率化
をテンプレートにして作成 ::
NJF Wiki
xpwiki
:Python/yieldでループを効率化 をテンプレートにして作成
開始行:
*Pythonのyieldとは
yieldはジェネレーター関数を作るための関数です。
ジェネレーター関数はイテレーターを簡単に作成するための関...
特にPythonでは、ジェネレーター関数を使うとforループなどを...
例えば、
def yieldTest():
yield 1
yield 2
yield 3
for i in yieldTest():
print i
結果:
1
2
3
となり、yieldで設定した値がループで使えるようになっていま...
ループではなく、「next」という関数で一つずつ値を取り出す...
yt = yieldTest()
print next(yt)
print next(yt)
print next(yt)
print next(yt)
結果:
1
2
3
Traceback (most recent call last):
File "yieldtest.py", line 19, in <module>
print next(yt)
StopIteration
値が無くなると例外が発生します。forループではnextを使って...
このとき、注意すべきなのは、ジェネレーター関数は呼び出さ...
例えば次のように関数を変更した場合、処理が一回ずつ止まっ...
def yieldTest():
print "yield 1"
yield 1
print "yield 2"
yield 2
print "yield 3"
yield 3
yt = yieldTest()
print next(yt)
print next(yt)
print next(yt)
結果:
yield 1
1
yield 2
2
yield 3
3
最初に「yieldTest」を呼び出したときに全ての処理が行われて...
そのため、ジェネレーター関数に無限ループがあったとしても...
def yieldTest():
i = 0
while True:
i += 1
yield i
yt = yieldTest()
print next(yt)
print next(yt)
print next(yt)
結果:
1
2
3
もしyieldTestを呼び出したときに処理がまとめて行われるので...
実際にジェネレーター関数を使う時には、このようにループの...
*yieldの使いどころ
単純なループなら特にyieldを使う意味は感じられないかも知れ...
しかし、複雑なループを何度も使う時にはyieldが威力を発揮し...
例えば可変長のデータが入ったファイルを読み込んで1データず...
他にも特定の場所を表すようなデータをある条件の満たした経...
終了行:
*Pythonのyieldとは
yieldはジェネレーター関数を作るための関数です。
ジェネレーター関数はイテレーターを簡単に作成するための関...
特にPythonでは、ジェネレーター関数を使うとforループなどを...
例えば、
def yieldTest():
yield 1
yield 2
yield 3
for i in yieldTest():
print i
結果:
1
2
3
となり、yieldで設定した値がループで使えるようになっていま...
ループではなく、「next」という関数で一つずつ値を取り出す...
yt = yieldTest()
print next(yt)
print next(yt)
print next(yt)
print next(yt)
結果:
1
2
3
Traceback (most recent call last):
File "yieldtest.py", line 19, in <module>
print next(yt)
StopIteration
値が無くなると例外が発生します。forループではnextを使って...
このとき、注意すべきなのは、ジェネレーター関数は呼び出さ...
例えば次のように関数を変更した場合、処理が一回ずつ止まっ...
def yieldTest():
print "yield 1"
yield 1
print "yield 2"
yield 2
print "yield 3"
yield 3
yt = yieldTest()
print next(yt)
print next(yt)
print next(yt)
結果:
yield 1
1
yield 2
2
yield 3
3
最初に「yieldTest」を呼び出したときに全ての処理が行われて...
そのため、ジェネレーター関数に無限ループがあったとしても...
def yieldTest():
i = 0
while True:
i += 1
yield i
yt = yieldTest()
print next(yt)
print next(yt)
print next(yt)
結果:
1
2
3
もしyieldTestを呼び出したときに処理がまとめて行われるので...
実際にジェネレーター関数を使う時には、このようにループの...
*yieldの使いどころ
単純なループなら特にyieldを使う意味は感じられないかも知れ...
しかし、複雑なループを何度も使う時にはyieldが威力を発揮し...
例えば可変長のデータが入ったファイルを読み込んで1データず...
他にも特定の場所を表すようなデータをある条件の満たした経...
ページ名: