ホームページ >テクノロジー周辺機器 >IT業界 >クイックヒント:Pythonの収量キーワードを理解します
この記事のレビューを査読してくれたShaumik Daityariに感謝します。 Pythonで関数を呼び出すと、関数は通常、リターン、例外、または端に到達するまで機能し始めます。その後、コントロールを発信者に戻します。その関数をもう一度呼び出すたびに、プロセスは
スクラッチから開始されます! あなたは人に道路上の赤い車を追跡するように頼んだと言ってください。その人は、彼らが赤い車を見つけたかどうかを尋ねる質問を受け続け、その人は「はい」または「いいえ」で答えます。その人が「はい」と答えた場合、赤い車が発見された回数が増加します。
Python:でこれを行う方法を見てみましょう
プログラムを実行した場合、何に気付きますか? 「はい」の答えの回数は常に1でキャップされていることに気づきましたか?「いいえ」と答えると、「はい」に回答することに関係なく0になりますか?
ここで、PythonのHightキーワードが登場します。利回りは、私たちが一時的に発信者への手コントロールをimport time def red_cars(answer): n = 0 while True: if answer == 'yes': n = n + 1 return n else: return n stop = time.time() + 5 * 60 while time.time() < stop: answer = raw_input('Did you spot a red car on the road? ("yes" or "no"): ') times = red_cars(answer) print 'You have spotted ' + str(times) + ' cars so far!'
で、コントロールが引き渡された時点から継続することを期待する手段です。
上記の例に解決策を与える前に、収穫量がどのように機能するかをよりよく説明するために非常に簡単な例を示しましょう。次の簡単なPythonスクリプトがあると言います:
スクリプトを実行すると、次の出力が取得されます。次のように、代わりに利回りを使用する場合は、
def step_by_step(): return 'step 1' return 'step 2' return 'step 3' step = step_by_step() for i in range (3): print step出力は次のとおりです
ご覧のとおり、
値のstep 1 step 1 step 1>シリーズ
を作成することができました。各呼び出しでは、値が得られるポイントから継続するように。このタイプの関数はジェネレーターと呼ばれます。このような関数は、次の収量ステートメントに移動する次のメソッドへの各呼び出しと同様に、ジェネレーターのイテレーターを作成します。
メインの例(赤い車)に戻った場合、必要なタスクを実行するために次のように書くことができます。def step_by_step(): yield 'step 1' yield 'step 2' yield 'step 3' step = step_by_step() for i in range (3): print step.next()したがって、私たちが見ることができるように、関数(ジェネレーター)が終了する最後の時点で実行を再開することに関心があり、異なる呼び出し間のローカル変数の値を維持することにも関心がある場合、収量は重要と見なされます。 - 関数を終了するときにそのような値が破壊される通常の関数とは異なり。
ただし、その他の収量の使用があります。たとえば、シーケンス(例えば、Excelシートの行)を返す関数がある場合は、収量を使用できます。また、各値をメモリに一度に持たずにシーケンスを繰り返す必要があります。つまり、メモリを保存するためです。
step 1 step 2 step 3
iterablesを使用する場合は、
収量を使用することもできます。この場合、関数間を通過するのが難しい大きなリストがあります。たとえば、Itertoolsモジュールの使用量の順列と組み合わせのためのPythonの組み込み関数。 Pythonの収量キーワードに関するよくある質問(FAQ)pythonの収量キーワードは、ループを備えた関数で使用されてイテレーターを作成します。関数が呼び出されると、イテレーターを返しますが、すぐに実行を開始しません。 IteratorのNext()メソッドが呼び出されると、関数が実行を開始します。利回りのキーワードに遭遇すると、引数を返してearvedと停止し、実行を一時停止します。この関数は、次の()を再度呼び出して、途切れた場所から再開できます。これにより、関数が時間の経過とともに一連の値を生成し、ジェネレーターとして動作します。 python?
はい、pythonの関数には収量と返品の両方のステートメントを含めることができます。ただし、returnステートメントが実行されると、関数の実行が終了し、コントロールが発信者に渡されることに注意することが重要です。したがって、利回り声明の前に戻り声明が実行された場合、利回りステートメントには到達しません。逆に、利回りステートメントが最初に実行された場合、関数が一時停止され、コントロールが発信者に渡されますが、機能は後で再開できます。その時点で、戻りステートメントを実行できます。 Pythonの再帰関数でHight Keywordを使用できますか?
evelo 1
higve 2gen = simple_generator()
print(next(gen))
停止を除いて:
break
この例では、停止例外をキャッチし、ループがないときにループから抜け出しますより多くの値を生む。
いいえ、PythonのLambda関数の収量キーワードを使用することはできません。これは、Lambda関数が単一の式に限定されているためであり、収量キーワードがステートメントコンテキストを導入するためです。ジェネレーター関数を作成する必要がある場合は、DEFステートメントを使用して通常の関数を定義する必要があります。
以上がクイックヒント:Pythonの収量キーワードを理解しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。