歩留まりについての深い理解
英語の yield は生産を意味します。初めて Python に触れたとき、私は非常に混乱し、yield の使い方がわかりませんでした。
次の例のように、 yield を使用して関数の戻り値にデータを詰め込むことができることは大まかに知っています:
def addlist(alist): for i in alist: yield i + 1
alist の各項目を取り出し、 i + 1 を詰めます。そこに。次に、呼び出して各項目を取り出します:
alist = [1, 2, 3, 4] for x in addlist(alist): print x,
これは実際に yield アプリケーションの例です
1. yield を含む関数
を含む関数が表示された場合、この関数はすでにジェネレーターであることを意味します。他の通常の関数とは大きく異なります。たとえば、次の単純な関数:
def h(): print 'To be brave' yield 5 h()
h() を呼び出した後、print ステートメントが実行されていないことがわかります。これは yield ですが、print ステートメントを実行するにはどうすればよいでしょうか?これについては後で説明します。この後の議論と検討を通じて、収量がどのように機能するかが理解できるようになります。
2. Yield は式です
Python 2.5 より前では、yield はステートメントでしたが、Python 2.5 では、yield は次のような式 (Expression) になりました。
m = yield 5
expression (yield 5 )は m に代入されるため、m = 5 と考えるのは間違いです。では、戻り値 (yield 5) を取得するにはどうすればよいでしょうか?後で紹介する send(msg) メソッドを使用する必要があります。
3. next() ステートメントを通して原理を見てみましょう
それでは、収量の動作原理を明らかにしましょう。上記の h() は、yield 式を持っているため、呼び出された後に実行されなかったことがわかっているため、next() ステートメントを通じて実行させます。 next() ステートメントは、次の yield 式までジェネレーターの実行を再開します。例:
def h(): print 'Wen Chuan' yield 5 print 'Fighting!' c = h() c.next()
c.next() が呼び出された後、h() は yield 5 に到達するまで実行を開始します。そのため、出力結果は次のようになります:
Wen Chuan
c.next() を再度呼び出すと、実行は次のようになります。次の yield 式が見つかるまで続行します。後で利回りがないため、例外がスローされます:
Wen Chuan
Fighting!
Traceback (most last call last):
File "/home/evergreen/Codes/yidld.py", line 11, in
c.next()
StopIteration
4. send(msg) と next()
next() によって、yield を含む関数がどのように実行されるかを理解した後、別の非常に重要な関数 send(メッセージ)。実際、 next() と send() は、ある意味では同様の関数を持っています。違いは、send() は yield 式の値を渡すことができるのに対し、next() は特定の値を渡すことができず、None のみを渡すことができるということです。したがって、
c.next() と c.send(None) は同じ効果があることがわかります。
この例を見てください:
def h(): print 'Wen Chuan', m = yield 5 # Fighting! print m d = yield 12 print 'We are together!' c = h() c.next() #相当于c.send(None) c.send('Fighting!') #(yield 5)表达式被赋予了'Fighting!'
出力結果は次のとおりです:
Wen Chuan Fighting!
初めて呼び出すときは、next() ステートメントまたは send(None) を使用してください。 use send None 以外の値を送信します。送信しないと、この値を受け取る yield ステートメントがないため、エラーが発生します。
5. send(msg) と next() の戻り値
send(msg) と next() の戻り値は、次の yield 式のパラメーターを返します。たとえば、yield 5 の場合、5 が返されます。ここで何か理解できましたか?この記事の最初の例では、alist の for i を介してジェネレーターをトラバースすることにより、alist.Next() が実際に毎回呼び出され、毎回の alist.Next() の戻り値が yield のパラメーターになります。何かが押し込まれているのではないかと思い始めます。上記の例を続けてみましょう:
def h(): print 'Wen Chuan', m = yield 5 # Fighting! print m d = yield 12 print 'We are together!' c = h() m = c.next() #m 获取了yield 5 的参数值 5 d = c.send('Fighting!') #d 获取了yield 12 的参数值12 print 'We will never forget the date', m, '.', d
出力結果:
Wen Chuan Fighting!
日付は決して忘れません 5. 12
6. throw() と close() がジェネレーターを中断します
ジェネレーターを中断するのは次のとおりです。 GeneratorExit 例外をスローしてジェネレーターを終了する非常に柔軟な手法です。実際、Close() メソッドには同じ機能があり、内部で throw(GeneratorExit) を呼び出します。見てみましょう:
def close(self): try: self.throw(GeneratorExit) except (GeneratorExit, StopIteration): pass else: raise RuntimeError("generator ignored GeneratorExit") # Other exceptions are not caught
したがって、close() メソッドを呼び出してから next() または send(msg) を呼び出すと、例外がスローされます:
Traceback (most recent call last): File "/home/evergreen/Codes/yidld.py", line 14, in <module> d = c.send('Fighting!') #d 获取了yield 12 的参数值12 StopIteration

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

VSコードはWindows 8で実行できますが、エクスペリエンスは大きくない場合があります。まず、システムが最新のパッチに更新されていることを確認してから、システムアーキテクチャに一致するVSコードインストールパッケージをダウンロードして、プロンプトとしてインストールします。インストール後、一部の拡張機能はWindows 8と互換性があり、代替拡張機能を探すか、仮想マシンで新しいWindowsシステムを使用する必要があることに注意してください。必要な拡張機能をインストールして、適切に動作するかどうかを確認します。 Windows 8ではVSコードは実行可能ですが、開発エクスペリエンスとセキュリティを向上させるために、新しいWindowsシステムにアップグレードすることをお勧めします。

VSコードはPythonの書き込みに使用でき、Pythonアプリケーションを開発するための理想的なツールになる多くの機能を提供できます。ユーザーは以下を可能にします。Python拡張機能をインストールして、コードの完了、構文の強調表示、デバッグなどの関数を取得できます。デバッガーを使用して、コードを段階的に追跡し、エラーを見つけて修正します。バージョンコントロールのためにGitを統合します。コードフォーマットツールを使用して、コードの一貫性を維持します。糸くずツールを使用して、事前に潜在的な問題を発見します。

VSコード拡張機能は、悪意のあるコードの隠れ、脆弱性の活用、合法的な拡張機能としての自慰行為など、悪意のあるリスクを引き起こします。悪意のある拡張機能を識別する方法には、パブリッシャーのチェック、コメントの読み取り、コードのチェック、およびインストールに注意してください。セキュリティ対策には、セキュリティ認識、良好な習慣、定期的な更新、ウイルス対策ソフトウェアも含まれます。

VSコードでは、次の手順を通じて端末でプログラムを実行できます。コードを準備し、統合端子を開き、コードディレクトリが端末作業ディレクトリと一致していることを確認します。プログラミング言語(pythonのpython your_file_name.pyなど)に従って実行コマンドを選択して、それが正常に実行されるかどうかを確認し、エラーを解決します。デバッガーを使用して、デバッグ効率を向上させます。

Pythonは、スムーズな学習曲線と簡潔な構文を備えた初心者により適しています。 JavaScriptは、急な学習曲線と柔軟な構文を備えたフロントエンド開発に適しています。 1。Python構文は直感的で、データサイエンスやバックエンド開発に適しています。 2。JavaScriptは柔軟で、フロントエンドおよびサーバー側のプログラミングで広く使用されています。

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。
