Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで「yield」キーワードは何をしますか?


ジェネレーターではyieldキーワードが使用されます。その動作を理解するために、最初に反復可能とは何かを見てみましょう。 Pythonオブジェクトのリスト、ファイル、文字列などは反復可能と呼ばれます。 for..を構文で使用してトラバースできるオブジェクトはすべて反復可能です。 Iteratorオブジェクトも反復可能ですが、反復できるのは1回だけです。イテレータオブジェクトは、iter()関数を使用して任意のイテレータから取得でき、反復が行われるnext()メソッドがあります。

>>> L1 = [1,2,3,4]
>>> I1 = iter(L1)
>>> while True:
   try:
      print (next(I1))
   except StopIteration:
sys.exit()

ジェネレーターは関数に似ていますが、yieldキーワードによってイテレーター内の連続するアイテムを生成します。

ジェネレーター関数が呼び出されると、関数の実行を開始することなく、イテレーターオブジェクトを返します。 next()メソッドが初めて呼び出されると、関数は、yieldステートメントに到達するまで実行を開始します。yieldステートメントは、生成された値を返します。イールドは追跡します。つまり、最後の実行を記憶し、2番目のnext()呼び出しは前の値から継続します。

次の例では、フィボナッチ数列の数値を含むイテレータを生成します。ジェネレーター関数fibo()を呼び出すたびに、フィボナッチ数列の連続する要素が生成されます。

import sys
def fibo(n):
   a,b=0,1
   while True:
      if a>n : return
      yield a
      a, b = b, a+b
f = fibo(20)
while True:
   try:
      print (next(f))
   except StopIteration:
      sys.exit()

  1. if __name__ ==__main __:Pythonで何をしますか?

    Pythonインタープリターがソースファイルを読み取ると、そこにあるすべてのコードが実行されます。 コードを実行する前に、いくつかの特別な変数を定義します。たとえば、Pythonインタープリターがそのモジュール(ソースファイル)をメインプログラムとして実行している場合、特別な__name__変数に値__main__を設定します。このファイルが別のモジュールからインポートされている場合、__name__はモジュールの名前に設定されます。 これを行う理由の1つは、直接実行できるモジュール(.pyファイル)を作成する場合があるためです。または、インポートして別のモジュールで使用することもできます

  2. Pythonでreload()関数は何をしますか?

    関数reload(moduleName)は、以前にロードされたモジュールをリロードします(構文 import moduleNameでロードしたと仮定します。これは、ソースファイルを編集した会話用です。モジュールであり、Pythonを終了して再起動せずにテストしたい場合。たとえば、 >>> import mymodule >>> # Edited mymodule and want to reload it in this script >>> reload(mymodule) moduleNameはモジュールの実際の名前であり、その名前を