ホームページ  >  記事  >  バックエンド開発  >  Pythonでのジェネレータの収量

Pythonでのジェネレータの収量

黄舟
黄舟オリジナル
2017-01-19 17:21:091424ブラウズ

ジェネレーター 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

__next__() メソッドは、次の yield ステートメントまでジェネレーター関数を実行します。 () メソッドは戻り値を yield に渡し、関数は再度 __next__() を呼び出すと、このプロセスは通常、ジェネレーター関数が最後に呼び出されるまで続行されます。

代わりにループを使用してください

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) を参照してください。

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