Python 例付きのラムダ関数
⚡ スマートサマリー
ラムダ関数 Python ラムダ式は、def の代わりに lambda キーワードを使用して定義される小さな匿名関数です。単一の式を保持し、任意の数の引数を受け取り、map()、filter()、sorted() などの組み込み関数に直接渡されることがよくあります。

Lambda関数とは Python?
A ラムダ関数 Python プログラミングは、匿名関数または名前のない関数です。 これは XNUMX 行しかない小規模で制限された関数です。 通常の関数と同様に、Lambda 関数は XNUMX つの式で複数の引数を持つことができます。
In Pythonラムダ式(またはラムダフォーム)は、匿名関数を作成するために利用されます。そのためには、 ラムダ キーワード(あなたが使うのと同じように) def 通常の関数を定義するために定義する。 Python 3つの重要な部分があります:
- ラムダキーワード。
- パラメーター (またはバインドされた変数)、および
- 関数本体。
ラムダ関数には任意の数のパラメータを含めることができますが、関数本体にはパラメータのみを含めることができます。 XNUMXつ 表現。 さらに、ラムダは XNUMX 行のコードで記述され、すぐに呼び出すこともできます。 これらすべてが実際に動作する様子を、次の例で見ていきます。
構文と例
ラムダ関数を記述するための正式な構文は次のとおりです。
lambda p1, p2: expression
ここで、p1 と p2 はラムダ関数に渡されるパラメーターです。 必要な数のパラメータを追加することも、少数のパラメータを追加することもできます。
ただし、通常の関数とは異なり、パラメータを括弧で囲まないことに注意してください。最後の部分(式)は有効な値であれば何でも構いません。 Python 関数に渡されたパラメータに対して作用する式。
例
ラムダについて理解したところで、例を使って試してみましょう。 それで、あなたの IDLE 次のように入力します。
adder = lambda x, y: x + y print (adder (1, 2))
Code 説明
ここでは、ラムダ関数によって返された結果を保持する変数を定義します。
1. 匿名関数を定義するために使用される lambda キーワード。
2. x と y はラムダ関数に渡すパラメーターです。
3. これは関数の本体で、渡した 2 つのパラメーターを追加します。 これは単一の式であることに注意してください。 ラムダ関数の本体に複数のステートメントを記述することはできません。
4. 関数を呼び出して、戻り値を出力します。
例
これはラムダの基本と構文を理解するための基本的な例でした。それでは、ラムダを出力して結果を見てみましょう。もう一度、 IDLE 次のように入力します。
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))
ファイルを保存し、F5 キーを押してプログラムを実行します。 これが得られる出力です。
出力:
<function <lambda> at 0x00000185C3BF81E0>
ここで何が起こっているのでしょうか?さらに理解を深めるために、コードを見てみましょう。
Code 説明:
1. ここでは、 string それはラムダ式にパラメータとして渡されます。
2. print文を呼び出して結果を出力するラムダ式を宣言します。
しかし、なぜプログラムは渡した文字列を出力しないのでしょうか?これは、ラムダ式自体が関数オブジェクトを返すためです。この例では、ラムダ式は渡されていません。 呼ばれます 印刷関数によってですが、単に 返す 関数オブジェクトと、それが格納されているメモリ位置。それがコンソールに表示される情報です。
例
ただし、次のようなプログラムを作成すると、次のようになります。
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)
F5キーを押して実行すると、次のような出力が表示されます。
出力:
some kind of a useless lambda
さて、ラムダ式が呼び出され、渡した文字列がコンソールに表示されます。しかし、この奇妙な構文は何なのでしょうか?なぜラムダ式の定義が括弧で囲まれているのでしょうか?これからその点について解説していきます。
Code 説明:
1. これは、前の例で定義したのと同じ文字列です。
2. この部分では、ラムダ式を定義し、文字列を引数として渡すことで即座に呼び出しています。これは即時実行関数式(IIFE)と呼ばれるもので、このチュートリアルの今後のセクションで詳しく説明します。
例
ラムダ式と通常の関数がどのように実行されるかを理解するために、最後の例を見てみましょう。 IDLE 新しいファイルに次のように入力します。
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))
それでは、ファイルを保存してF5キーを押してプログラムを実行してください。間違いがなければ、以下のような出力が表示されるはずです。
出力:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Code 説明:
1. 最初の引数として別の関数を受け取り、その後に続く任意の引数を受け取る、guru という名前の関数。
2. printer_one は、渡されたパラメータを印刷して返すシンプルな関数です。
3. printer_two は printer_one と似ていますが、return 文がありません。
4. この部分では、guru 関数を呼び出し、プリンタ関数と文字列をパラメータとして渡します。
5. これは、ラムダ式を使用して第4ステップ(つまり、guru関数を呼び出す)を実現するための構文です。
次のセクションでは、ラムダ関数を使用する方法を学びます。 地図(), reduce(), フィルタ() in Python.
ラムダ式の使用 Python ビルトイン
ラムダ関数は、組み込みメソッドを使用して操作を実行するためのエレガントで強力な方法を提供します。 Pythonラムダをすぐに呼び出して、これらの関数に引数として渡すことができるため、これが可能になります。
IIFEで Python ラムダ
IIFE の略 すぐに呼び出される関数の実行。 つまり、ラムダ関数は定義された瞬間から呼び出し可能になるということです。例を使ってこれを理解しましょう。 IDLE 次のように入力します。
(lambda x: x + x)(2)
出力とコードの説明は次のとおりです。
ラムダのこの機能により、すぐに呼び出すことができ、map() やreduce() などの関数内でラムダを使用できるようになります。 これらの機能を再度使用したくない場合に便利です。
filter() のラムダ
フィルター関数は、一連の要素からいくつかの特定の要素を選択するために使用されます。 シーケンスには、リスト、セット、タプルなどの任意の反復子を指定できます。
選択される要素は、事前に定義された制約に基づいて決定されます。この制約には2つのパラメータが必要です。
- フィルタリング制約を定義する関数
- シーケンス (リスト、タプルなどの任意の反復子)
たとえば、
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
出力は次のとおりです。
[10, 8, 7, 5, 11]
Code 説明:
1. 最初のステートメントでは、いくつかの数値を含むシーケンスと呼ばれるリストを定義します。
2. ここでは、filter() 関数によって返されたフィルターされた値を格納する、filtered_result という変数を宣言します。
3. リストの各要素に対して実行され、値が 4 より大きい場合に true を返すラムダ関数。
4. フィルター関数によって返された結果を出力します。
map() のラムダ
map関数は、シーケンス内のすべての要素に特定の操作を適用するために使用されます。filter()関数と同様に、2つのパラメータを取ります。
- 要素に対して実行する操作を定義する関数
- XNUMX つ以上のシーケンス
たとえば、指定されたリスト内の数字の平方を出力するプログラムは次のとおりです。
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
出力:
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
Code 説明:
1. ここでは、いくつかの数値を含むシーケンスと呼ばれるリストを定義します。
2. マップされた値を格納するfiltered_resultという変数を宣言します。
3. リストの各要素に対して実行され、その数値の二乗を返すラムダ関数。
4. map関数が返した結果を表示します。
reduce() のラムダ
map() と同様に、reduce 関数はシーケンス内のすべての要素に操作を適用するために使用されます。ただし、その動作は map とは異なります。reduce() 関数が出力を計算する手順は次のとおりです。
ステップ1) シーケンスの最初の 2 つの要素に対して定義された操作を実行します。
ステップ2) この結果を保存します。
ステップ3) 保存された結果とシーケンス内の次の要素を使用して操作を実行します。
ステップ4) 要素がなくなるまで繰り返します。
また、次の XNUMX つのパラメータも受け取ります。
- 実行する操作を定義する関数
- シーケンス (リスト、タプルなどの任意の反復子)
たとえば、リスト内のすべての要素の積を返すプログラムを次に示します。
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
出力は次のとおりです。
120
Code 説明:
1. functoolsモジュールからreduceをインポートします。
2. ここでは、いくつかの数値を含むシーケンスと呼ばれるリストを定義します。
3. 縮小値を格納するproductという変数を宣言します。
4. リストの各要素に対して実行されるラムダ関数。前の結果に基づいて、その数値の積を返します。
5. reduce関数が返した結果を出力します。
ラムダ関数を使用する理由 (そして使用しない理由)
次のセクションで説明するように、ラムダはインタープリター レベルでは通常の関数と同じように扱われます。 ある意味、ラムダは、単一の式を返す関数を作成するためのコンパクトな構文を提供すると言えます。
しかし、ラムダ式を使うのが良い場合と避けるべき場合を知っておく必要があります。このセクションでは、 Python ラムダ式を書く際の開発者向け。
ラムダの最も一般的な使用例の 1 つは関数型プログラミングです。 Python 関数型プログラミングと呼ばれるプログラミングのパラダイム (またはスタイル) をサポートします。
ラムダ式を使うと、関数を別の関数の引数として渡すことができます(例えば、map関数やfilter関数など)。このような場合、ラムダ式を使うことで、一度限りの関数を作成し、それを引数として渡すという洗練された方法が可能になります。
Lambda を使用すべきではないのはどのような場合ですか?
実稼働環境では、複雑なラムダ関数を記述しないでください。コードを保守するコーダーがそれを解読するのは非常に困難です。複雑なワンライナー式を作成している場合は、適切な関数を定義する方がはるかに優れています。ベストプラクティスとして、単純なコードは複雑なコードよりも常に優れていることを覚えておく必要があります。
ラムダ関数と通常の関数
前述のとおり、ラムダ式は識別子がバインドされていない関数です。簡単に言うと、名前のない関数(つまり匿名関数)です。ラムダ式と通常の関数の違いを示す表を以下に示します。 Python.
| ラムダ | 通常の関数 |
|---|---|
構文:
lambda x : x + x
|
構文:
def (x) : return x + x |
| Lambda 関数の本体には式を XNUMX つだけ含めることができます。 | 正規関数は、その本体に複数の式やステートメントを含めることができます。 |
| ラムダ式には名前が付けられていません。そのため、匿名関数とも呼ばれます。 | 通常の関数には名前と署名が必要です。 |
| 本体が自動的に返されるため、ラムダには return ステートメントは含まれません。 | 値を返す必要のある関数には、return文を含める必要があります。 |
違いの説明
ラムダ関数と通常の関数の主な違いは、ラムダ関数は XNUMX つの式のみを評価し、関数オブジェクトを生成することです。 したがって、前の例で行ったように、ラムダ関数の結果に名前を付けてプログラムで使用できます。
上記の例の通常の関数は次のようになります。
def adder (x, y): return x + y print (adder (1, 2))
ここで、を定義する必要があります。 名 関数の場合 収益 私たちがしたときの結果 コール ラムダ関数には、常にデフォルトで返される単一の式しか含まれないため、return文は含まれません。ラムダはすぐに呼び出すことができるため、代入する必要もありません(前のセクションを参照)。ご覧のとおり、ラムダは、と組み合わせると特に強力になります。 Pythonの組み込み関数。
しかし、ラムダ式が(上記のような)単一の式を返す関数とどう違うのか疑問に思うかもしれません。インタープリタレベルでは、大きな違いはありません。驚くかもしれませんが、 Python インタープリタによって通常の関数として扱われます。
バイトコードレベルでは、2 つの定義は同じように処理されます。 Python インタプリタ。関数に名前を付けることはできません。 ラムダ それは予約されているので Pythonただし、他の関数名を使用しても同じバイトコードが生成されます。
