Python プログラミングの世界では、効率的で簡潔なコードに関する議論で、ジェネレーターとラムダ関数という 2 つの概念がよく出てきます。私は発電機のサプライヤーとして、さまざまな業界での発電機の実用化を目の当たりにしてきました。ただし、ジェネレーターとラムダ関数の違いを理解することは、より効果的な Python コードを記述したいプログラマーにとって非常に重要です。このブログ投稿では、これら 2 つの概念の主な違い、それぞれの固有の機能、およびそれぞれをいつ使用するかについて説明します。
Python のジェネレーターとは何ですか?
Python のジェネレーターは特殊なタイプのイテレーターです。これにより、すべての値を一度にメモリに保存することなく、一連の値を反復処理できます。これは、大規模なデータセットまたは無限シーケンスを扱う場合に特に便利です。ジェネレーターは、ジェネレーター関数またはジェネレーター式のいずれかを使用して定義されます。
ジェネレータ関数
ジェネレーター関数は通常の関数と同じように定義されますが、代わりに戻るキーワード、それは使用します収率。ジェネレーター関数が呼び出されると、ジェネレーター オブジェクトが返されます。これは、のためにループまたは次()関数。
最初のを生成するジェネレーター関数の簡単な例を次に示します。n丁数:
def Even_numbers(n): num = 0 while num < n: yield num num += 2 # ジェネレーター オブジェクトを作成します gen = Even_numbers(10) # gen の num についてジェネレーターを反復処理します: print(num)
この例では、偶数関数は、収率キーワード。関数が呼び出されても、関数内のコードはすぐには実行されません。代わりに、ジェネレータ オブジェクトを返します。毎回、次()関数がジェネレーター オブジェクト上で (明示的または暗黙的に) 呼び出されます。のためにループ)、関数は次のループに到達するまで中断したところから実行を再開します。収率声明。
ジェネレータ式
ジェネレータ式はリスト内包表記に似ていますが、角括弧を使用する代わりに[]、括弧を使用します()。ジェネレーター式は、ジェネレーターを作成するためのより簡潔な方法です。
最初の 10 個の数値の 2 乗を生成するジェネレータ式の例を次に示します。
gen = (x**2 for x in range(10)) # gen の num のジェネレーターを反復処理します: print(num)
Python の Lambda 関数とは何ですか?
Python のラムダ関数は、小さな匿名関数です。引数はいくつでも取ることができますが、式は 1 つだけしか含めることができません。 Lambda 関数は、短期間に単純な関数が必要な場合によく使用されます。地図()、フィルター()、 またはソート済み()機能。
2 つの数値を加算するラムダ関数の例を次に示します。
add = lambda x, y: x + y # ラムダ関数を呼び出す result = add(3, 5) print(result)
この例では、ラムダ関数は 2 つの引数を受け取ります×そしてそしてそしてそれらの合計を返します。ラムダ関数が変数に代入されます。追加これは通常の関数のように呼び出すことができます。
ジェネレーターと Lambda 関数の主な違い
構文と定義
- 発電機: ジェネレーターは、ジェネレーター関数 (
収率キーワード) またはジェネレーター式 (かっこを使用)。これらは、時間の経過とともに一連の値を生成するように設計されています。 - ラムダ関数: Lambda 関数は、
ラムダキーワードの後に引数のリスト、コロン、式が続きます。これらは、シンプルな 1 行の関数になるように設計されています。
目的と使用例
- 発電機: ジェネレータは、大きな値のシーケンスを生成する必要があるが、それらすべてを一度にメモリに保存したくない場合に使用されます。これらは、データ処理、データのストリーミング、および大きなファイルの反復処理で一般的に使用されます。たとえば、大規模なデータセットを操作していて、一度に 1 項目ずつ処理する必要がある場合、ジェネレーターは優れたソリューションとなる可能性があります。
- ラムダ関数: Lambda 関数は、単純な 1 回限りの関数が必要な場合に使用されます。これらは通常、次のような高階関数で使用されます。
地図()、フィルター()、 そしてソート済み()。たとえば、特定のキーに基づいて辞書のリストを並べ替える場合は、ラムダ関数を鍵の引数ソート済み()関数。
メモリ使用量
- 発電機: ジェネレーターはオンザフライで値を生成するため、メモリ効率が高くなります。値のシーケンス全体ではなく、ジェネレーターの現在の状態のみが保存されます。そのため、大規模なデータセットを扱うのに最適です。
- ラムダ関数: Lambda 関数には特別なメモリ管理機能はありません。これらは、メモリ使用量の点では他の関数とまったく同じです。
戻り値
- 発電機: ジェネレータはイテレータであるジェネレータ オブジェクトを返します。ジェネレーター オブジェクトを反復処理して、値を 1 つずつ取得できます。
- ラムダ関数: Lambda 関数は、それに含まれる式の結果を返します。これらは通常の関数と同様に呼び出され、単一の値を返します。
実用的なアプリケーション
現実世界のシナリオにおけるジェネレーター
私は発電機のサプライヤーとして、さまざまな業界で発電機がどのように使用されるかを見てきました。たとえば、発電業界では、送電網にアクセスできない地域に電力を供給するために発電機が使用されます。私たちの静音型発電機静かに動作するように設計されており、騒音が気になる住宅街やイベントなどに最適です。の電気始動サイレントジェネレーター電気スタートの利便性を提供し、技術的知識が限られている方でも簡単に使用できます。そしてアウトドア愛好家のために、キャンプ用小型ディーゼル発電機キャンプ旅行に信頼できる電源を提供します。
Python では、同様のシナリオでジェネレーターを使用できます。たとえば、データ処理パイプラインで作業している場合、ジェネレーターを使用すると、ファイル全体をメモリにロードせずに、大きなファイルを 1 行ずつ読み取ることができます。これにより、プログラムのパフォーマンスが大幅に向上します。
現実世界のシナリオにおける Lambda 関数
Lambda 関数は、データ分析や並べ替えによく使用されます。たとえば、従業員を表す辞書のリストがあり、給与順に並べ替えたい場合は、ラムダ関数を鍵の引数ソート済み()関数:
employees = [ {'name': 'Alice', 'salary': 5000}, {'name': 'Bob', 'salary': 3000}, {'name': 'Charlie', 'salary': 7000} ] # 従業員を給与で並べ替えますsorted_employees =sorted(employees, key=lambda x: x['salary']) # を出力しますsorted_employees の従業員に対して従業員をソート: 印刷(従業員)
ジェネレーターと Lambda 関数を使用する場合
ジェネレーターを使用する場合
- 大量の値のシーケンスを生成する必要があるが、それらすべてを一度にメモリに保存したくない場合。
- データ処理パイプラインなど、一連の値を 1 つずつ繰り返す必要がある場合。
- 無限の値のシーケンスを作成する必要がある場合。
Lambda 関数を使用する場合
- シンプルな 1 回限りの関数が必要な場合。
- 次のように、関数を引数として別の関数に渡す必要がある場合
地図()、フィルター()、 またはソート済み()。 - より簡潔なコードを書きたいとき。
結論
結論として、ジェネレーターとラムダ関数は、異なる目的を果たす Python の 2 つの強力な機能です。ジェネレーターは時間の経過とともに一連の値を生成するように設計されていますが、ラムダ関数は単純な 1 行関数になるように設計されています。これら 2 つの概念の違いとそれぞれをいつ使用するかを理解すると、より効率的で簡潔な Python コードを作成するのに役立ちます。
住宅用、商業用、屋外用など、高品質の発電機をお探しの場合は、ニーズを満たす幅広いオプションをご用意しています。お客様の要件について話し合い、最適な発電機を見つけるには、今すぐお問い合わせください。


参考文献
- Python ドキュメント: https://docs.python.org/3/
- 本物のPython: https://realpython.com/

