ホームページ > テクノロジー周辺機器 > IT業界 > クイックヒント:Pythonの収量キーワードを理解します

クイックヒント:Pythonの収量キーワードを理解します

Jennifer Aniston
リリース: 2025-02-18 10:20:10
オリジナル
511 人が閲覧しました

Quick Tip: Understanding the Yield Keyword in Python

クイックヒント: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の収量キーワードとリターンキーワードの違いは何ですか?>

Pythonの収量キーワードとリターンキーワードは機能で使用されますが、さまざまな目的に役立ちます。関数が値を生成してから終了するときに、返品キーワードが使用されます。関数が値を返すと、実行が完了し、制御が発信者に渡されます。一方、利回りキーワードは、returnステートメントのような関数で使用されますが、値を生成し、関数の実行を一時停止します。この関数は、中断した場所から後で再開でき、一度にそれらをすべて計算してリストのように送り返す代わりに、時間の経過とともに一連の値を生成できるようにします。 pythonで作業しますか?

pythonの収量キーワードは、ループを備えた関数で使用されてイテレーターを作成します。関数が呼び出されると、イテレーターを返しますが、すぐに実行を開始しません。 IteratorのNext()メソッドが呼び出されると、関数が実行を開始します。利回りのキーワードに遭遇すると、引数を返してearvedと停止し、実行を一時停止します。この関数は、次の()を再度呼び出して、途切れた場所から再開できます。これにより、関数が時間の経過とともに一連の値を生成し、ジェネレーターとして動作します。 python?

確かに、Pythonでの収量キーワードを使用する簡単な例を次に示します。 simple_generator():

print(value)

の値の値については、この例では、simple_generatorは利回りキーワードを使用するため、ジェネレーター関数です。 simple_generator()によって返されたジェネレーターオブジェクトを反復すると、各収量間で実行を一時停止します。 >

Pythonの収量キーワードを使用すると、一度にそれらをすべて計算してリストに戻すのではなく、時間の経過とともに一連の結果を生成できる関数を書き込むことができます。これは、結果セットが大きく、メモリを保存したい場合に特に役立ちます。また、独自の反復可能なオブジェクトを作成し、ループ、包括、および繰り返し可能な機能にPythonを使用して使用することもできます。

関数には、pythonの収量ステートメントとリターンステートメントの両方を含めることができますか?

​​

はい、pythonの関数には収量と返品の両方のステートメントを含めることができます。ただし、returnステートメントが実行されると、関数の実行が終了し、コントロールが発信者に渡されることに注意することが重要です。したがって、利回り声明の前に戻り声明が実行された場合、利回りステートメントには到達しません。逆に、利回りステートメントが最初に実行された場合、関数が一時停止され、コントロールが発信者に渡されますが、機能は後で再開できます。その時点で、戻りステートメントを実行できます。 Pythonの再帰関数でHight Keywordを使用できますか?

​​はい、Pythonの再帰関数でHightキーワードを使用できます。ただし、再帰呼び出しを反復し、各値を生成することを忘れないでください。そうしないと、予想される値の代わりにジェネレーターオブジェクトを取得します。 Python?ジェネレーター関数とPythonの通常の関数の主な違いは、発電機関数が収量キーワードを使用し、通常の関数が戻りキーワードを使用することです。ジェネレーター関数が呼び出されると、関数の実行を開始せずにジェネレーターオブジェクトを返します。次の()メソッドが初めて呼び出されると、関数は、値を生成する収量キーワードに到達するまで実行を開始します。その後、機能は実行と制御を一時停止し、発信者に渡されます。一方、通常の関数が呼び出されると、すぐに実行を開始し、完了まで実行し、値を返します。はい、Pythonの単一関数で複数の収量ステートメントを使用できます。関数が呼び出されると、利回りステートメントに遭遇するたびに値が生成され、その実行を一時停止し、コントロールを発信者に戻します。次に関数の次の()メソッドが呼び出されたとき、次の利回りステートメントに遭遇するまで、途切れた場所から実行を再開します。 python?

Pythonの発電機関数にはこれ以上の値がない場合、停止の例外が生じます。 Try/を除くブロックを使用して、この例外をキャッチできます。例は次のとおりです。

def simple_generator():

evelo 1

higve 2

hied 3

gen = simple_generator()

try:

print(next(gen))
停止を除いて:
break

この例では、停止例外をキャッチし、ループがないときにループから抜け出しますより多くの値を生む。

PythonのLambda関数の収量キーワードを使用できますか?

​​

いいえ、PythonのLambda関数の収量キーワードを使用することはできません。これは、Lambda関数が単一の式に限定されているためであり、収量キーワードがステートメントコンテキストを導入するためです。ジェネレーター関数を作成する必要がある場合は、DEFステートメントを使用して通常の関数を定義する必要があります。

以上がクイックヒント:Pythonの収量キーワードを理解しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート