ジェネレーター yield: yield ステートメントを使用すると、関数は単なる値ではなく一連の結果を生成できます。
def countdow(n): print("Start!"); while n>0: yield n; n -= 1; c = countdow(5); print(c.__next__()) print(c.__next__())
Start! 5 4
代わりにループを使用してください
for i in countdow(5): print(i);
5 4 3 2 1
ジェネレーターは、処理パイプライン、ストリーム、またはデータフローに基づいてプログラムを作成する強力な方法です。
例:
def tail(f): for line in f: if not line : #如果 非真 则暂时休眠并且再次尝试 time.sleep(0.1); continue; yield line; # 将获取到的文件中的值 生成一个序列的值 filecount = tail(open('E:/work.txt')); #grep方法 用于在上面方法生成器中查找特定的子字符串 def grep(lines,searchtext): for line in lines: if searchtext in line : yield line; lines = grep(filecount,'tom'); #查找带有tom 的子字符串 for line in lines: print(line);
出力結果:
'tom', 120,132
ジェネレーターの役割: プログラムが実行されると、実行値
が yield に渡されます。これは、この時点でプログラムが一時停止状態にあると考えられます。 __next__() メソッドが使用されると、関数は再び yield に遭遇するまで実行を続けます。
利点: yield は単一の値を保存しませんが、すべての要素を一度に計算するのではなく、現在のプログラムの実行ステータスを保存します。
上記は Python での生成です。デバイスの歩留まりの内容については、PHP 中国語 Web サイト (www.php.cn) を参照してください。