この章では、高度な関数、派生、生成のトピックについて引き続き説明します。概念の多くは前の章で説明されていますが、この章では、より包括的かつ詳細に説明します
この章のハイライト:
1.リストの導出
2.ジェネレーター機能
3.ジェネレータ式
次に、上記内容について詳しく説明する。
1.リストの導出
標準の派生構文:[反復可能なターゲットの式]
上記の構文は抽象的なように見えますが、次のようにコード例を通して理解することができます。
上記のコードを通じて、数学的な説明で関数を考えることができ、関数式を使用して数値のグループを表すことができます。ここでの導出も同様の効果があります。
これは基本的な派生文法です。これに基づいて、フィルターするifステートメントを追加したり、複数のforステートメントや複数のifステートメントを追加したりすることもできます
次のように、ifステートメントでフィルタリングするか、上記のコードを例として使用して偶数を除外します。
複数のforステートメントを追加できます。コード例は次のとおりです。
複数のifステートメントを追加できます。コード例は次のとおりです。
上記はリストの推論の方法であり、実際には、コレクションと辞書は導出を通じて構築できます
ここで、派生は便宜と速度のために使用されていることに注意してください。複数の場合、および処理が読み取りと理解に影響を与える場合は、KISSの原則に留意して他の方法を選択することをお勧めします(単純で愚かです)
2.ジェネレーター機能
定義:通常のdefステートメントを使用して書き込みますが、yieldステートメントを使用して一度に1つの結果を返し、各結果間で状態を一時停止および復元します
定義からいくつかの点を理解できます
1)defステートメントを使用した関数
2)他のdef関数とは異なり、yieldステートメントが含まれています。これは、ジェネレーター関数を示す重要な記号でもあります。
3)すべての結果ではなく、一度に1つの結果を返す
定義による理解には大まかに3つの側面があり、コード例によるより具体的な理解があります。コード例は次のとおりです。
最初に、ジェネレーター関数を次のように定義します。
この関数の機能は、データを提供し、一連の平方数を返すことです
一般的な関数はわかっています。たとえば、G(5)のように直接呼び出すだけです。関数自体は出力されないため、print(G(5))で出力しようとすると、コードは次のようになります。
システムが私たちが想像したものではないことに気付くでしょう、なぜですか?ジェネレーター関数の違いは次のとおりです。ジェネレーター関数がジェネレーターオブジェクト(ジェネレーターオブジェクト)を生成することは、システムプロンプトから確認できます。
このオブジェクトの使い方は?次の関数を使用できます。次の関数は、一度に1つの結果のみを返します。これは、ジェネレータ関数で説明したものと同じです。具体的なコード例は次のとおりです。
私たちの間で使用すると、結果は0になります。なぜですか?変に感じたら、次の方法でもう一度試してください。
2つの間に違いはありますか?これは読者に考えさせることができます
これを使用すると、ジェネレーター関数が一連の数値を生成しますが、一度に生成されます。つまり、1つを使用して1つずつ生成し、1つを使用して1つずつ生成し、オンデマンドで生成します。生成]?つまり、関数があるのに、なぜジェネレータ関数が必要なのでしょうか。単一の結果を生成するのは良いことではないでしょうか?
練習や実際の作業を通じて、大量のデータを生成する必要がある場合がありますが、使用中はごく一部しか使用されません。また、データ量が多い場合は、メモリなどのコンピュータの操作にも問題が生じます。十分なクラッシュがないため、大量のコンテンツを取り込んで不要なデータを生成しないようにするには、ジェネレーター関数を使用して
3.ジェネレータ式
フォームに関しては、ジェネレータ式は一般的なリスト内包表記に似ており、すべてのリスト内包表記構文もサポートされていますが、角括弧の代わりに括弧内に含まれています
結果から、それはジェネレータ関数と導出文法の組み合わせです
最初の部分で述べたリストの派生は、角かっこが括弧に変換されている限り、[x for range(5)]のようになります。
これはジェネレーターであるため、次の関数を使用してデータを呼び出すことができますが、ここでは比較的高速な方法があります。データの量が大きくない場合、コンテンツには影響しません。次のように、リストからリストに変換できます。
上で述べたように、ジェネレーター関数はメモリ用に最適化され、ジェネレーター式はメモリ用にさらに最適化されます
ジェネレーターを思い出す必要があることの1つは、1つのパスで反復することです。つまり、最初から最後までしかトラバースできないため、次のコードでより簡単に理解できます。
ジェネレーターを2つの異なる変数に割り当て、2つの異なる変数は次の関数を次のように呼び出します。
つまり、一度使用する必要はありません。もう一度使用する場合は、ジェネレータオブジェクトを再作成する必要があります。
上記はこの章の主要な内容の全体的な説明であり、次の章でお会いしましょう!
「Python学習マニュアル第5版」各章の時間計画と進捗:
2019.11.25-2019.12.01第01章完了:「Python学習マニュアル第5版」 -第1章Q&Aセッション
2019.12.02-2019.12.08第02章が完成:「Python学習マニュアル第5版」-第2章Pythonがプログラムを実行する方法
2019.12.09-2019.12.15第03章完了:「Python学習マニュアル第5版」 -第3章Pythonプログラムの実行方法
2019.12.16-2019.12.22第04章完了:「Python学習マニュアル第5版」 -第4章でPythonオブジェクトタイプを紹介
2019.12.23-2019.12.29第05章完了:「Python学習マニュアル第5版」-第5章数値型
2019.12.30-2020.01.05第06章完了:「Python学習マニュアル第5版」 -第6章動的型
2020.01.06-2020.01.12第07章完了:「Python学習マニュアル第5版」 -第7章文字列の基本
2020.01.12〜2020.01.19第08章完成:「Python学習マニュアル第5版」 -第8章リストと辞書
2020.01.20-2020.01.26第09章完成:「Python学習マニュアル第5版」 -第9章のタプル、ファイル、およびその他のコアタイプ
2020.01.27-2020.02.02第10章完了:「Python学習マニュアル第5版」 -第10章Pythonステートメントの概要
2020.02.03-2020.02.09第11章、「Python学習マニュアル第5版」 -第11章、割り当て、式、印刷
2020.02.10-2020.02.16第12章完成:「Python学習マニュアル第5版」 -第12章ifテストおよび文法規則
2020.02.17-2020.02.23第13章完了:「Python学習マニュアル第5版」 -第13章whileループおよびforループ
2020.02.24-2020.03.01第14章を完了:「Python学習マニュアル第5版」 -第14章反復と導出
2020.03.02-2020.03.08第15章を完了:「Python学習マニュアル第5版」 -第15章のドキュメント
2020.03.09-2020.03.15第16章完了:「Python学習マニュアル第5版」 -第16章関数の基本
2020.03.16-2020.03.22第17章完了:「Python学習マニュアル第5版」 -第17章スコープ
2020.03.23-2020.03.29第18章完了:「Python学習マニュアル第5版」 -第18章パラメータ
2020.03.30-2020.04.05第19章完了:「Python学習マニュアル第5版」 -第19章関数の高度なトピック
2020.04.06-2020.04.12第20章完了
2020.04.13-2020.04.19第21章、未完成
2020.04.20-2020.04.26第22章、未完成
2020.04.27-2020.05.03第23章、未完成
次のリンクは、この研究ノートのすべての章の最新の進捗状況を提供します