Python の利回りの概要と例

WBOY
WBOYオリジナル
2016-06-16 08:44:25917ブラウズ

yield を持つ関数はジェネレーターです。ジェネレーターの生成は関数呼び出しのように見えますが、next() が呼び出されるまで関数コードは実行されません (自動的に next( が呼び出されます)。 )) 実行を開始します。実行フローは関数の流れに従って実行されますが、yield ステートメントが実行されるたびに中断され、次の実行は次の yield ステートメントから継続されます。通常の実行中に関数が yield によって数回中断され、各中断が yield を通じて現在の反復値を返しているように見えます。

yield の利点: 関数をジェネレーターとして書き直すと、次の next() の値を計算するために状態を保存するのではなく、クラスのインスタンスを使用する場合と比較して、反復処理が可能になります。コードが簡潔であるだけでなく、実行フローも非常に明確です。

テストコード:

コードをコピー コードは次のとおりです:

#!/usr/bin/env python
#-*-coding:utf8 -*-

def fab(max):
"""フィボナッチ数列"""
n, a, b = 0, 0, 1
while n yield b
a、b = b、a + b
n += 1


def perm(items, n=None):
"""フルアレンジメント""
n が None の場合:
n = len(items)
for i in range (len(items)):
v = items[i:i+1]
if n == 1:
yield v
else:
rest = items[:i] + items[i+1:]
for p in perm(rest, n-1):
yield v + p

if __name__ == '__main__':
for n in fab(5):
print n
print "Full array:123"
for n in perm("123"):
印刷 n

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。