実用的な例を使用したPythonラムダ関数
公開: 2021-06-21Pythonラムダ関数は、小さく、名前なしで定義される関数です。 Pythonでは、キーワード「def」を使用して関数を定義します。 ただし、無名関数の場合、キーワード「lambda」を使用してこれらの関数を定義します。 したがって、「ラムダ関数」という名前が付けられています。 名前があるか、関数に割り当てられていない可能性があります。
Pythonの通常の関数と比較すると、ラムダ関数は短いです。
Python、Java、C ++、C#などのプログラミング言語の構文にラムダ関数が追加されました。 MLまたはLISPの言語のコアコンセプトとして使用されていますが。
この記事では、 Pythonラムダ関数の概念とその使用法に焦点を当てます。
プログラミング言語のタイプに基づいて、ラムダ関数は次の用語と互換的に使用できます。
- 匿名関数
- ラムダ関数
- ラムダ式
- ラムダの抽象化
- ラムダフォーム
- 関数リテラル
目次
ラムダ計算
ラムダ計算は、ラムダ式の基礎となる計算モデルです。 ラムダ計算は純粋な抽象化に基づいており、アロンゾチャーチによって形式化されました。 ラムダ抽象化とも呼ばれ、アロンゾチャーチによって作成された元のモデルを指します。
この概念により、あらゆる計算をエンコードできます。
ラムダ関数の構文:
次の構文は、Pythonでラムダ関数を使用するときに使用されます。
ラムダ引数:式
Pythonのラムダ関数には任意の数の引数を指定できます。 ただし、関数は1つの式しか持つことができません。 この式は最初に評価され、次に返されます。 ラムダ関数の使用は、関数オブジェクトの要件がある場合は常に行われます。
2つの引数を持つ無名関数がラムダで定義されているが、どの変数にもバインドされていない場合を考えてみましょう。
ラムダx、y:x + y
ここでは、2つの引数が関数によって取得され、合計が返されます。
ラムダ関数によって示されるいくつかの特性があります。
- ラムダ関数の本体にステートメントを含めることはできませんが、式のみを含めることができます。
- 実行コードは1行だけです。
- 型アノテーションは、Pythonのラムダ関数ではサポートされていません。
- 即時呼び出しが許可されます。
ステートメントは使用できません
前述のように、ラムダ関数を定義している間はステートメントを使用できません。 ユーザーがpass、return、raise、assertなどのステートメントを使用すると、SyntaxError例外が発生します。 例外の結果は、以下のコードで表示できます
ソース
上記のコードでは、関数lambdaの本体にassertステートメントを含むコードが解析されたときに構文エラーが発生しました。
ラムダ関数には1つの式しか含まれていません
Pythonのすべての標準の通常関数とは対照的に、Pythonのラムダ関数には1つの式しか含めることができません。 関数lambdaの本体では、括弧付きの複数の行を使用して、式を全体に広げることができます。 ただし、それでも単一の式として残ります。
ソース
文字列「odd」は「odd」引数がある場合に返され、文字列「even」は「even」引数がある場合に返されます。 上記のコードでは、括弧内に2行が含まれているため使用されています。 しかし、それは単一の表現として残ります。
タイプ注釈
Pythonで「型ヒント」が利用できるようになったため、Pythonのラムダ関数よりも通常の関数が優先されるようになりました。 mypy、pyreなどのツールが利用できるようになると、 full_name()でタイプエラーをキャッチできます。 ラムダ関数に関連する構文エラーは、実行時に発生します。
即時呼び出し関数実行(IIFE)
この機能は、Pythonインタープリターの外部では使用できません。 Pythonでのラムダ式の定義は、map()などの高階関数に渡すことができます。
ラムダ関数の引数
Pythonラムダ式では、次のような引数を渡すためのさまざまな方法がサポートされています。
- 位置論
- 名前付き引数は、キーワード引数とも呼ばれます
- varargsとも呼ばれる引数の変数リスト。
- キーワード引数の変数リスト
- キーワードのみの引数。
Pythonラムダ式のデコレータ
デコレータは、クラスまたは関数に動作を追加できるパターン実装として定義できます。 @decoratorの構文は、Pythonでデコレータを表現するための関数のプレフィックスとして使用されます
引数'Python'を使用した場合のみ、 decorated_function()が出力されます。 印刷される追加の動作は、「関数の呼び出し」decorated_functionです。
Pythonでは、ラムダ関数にデコレータを追加できますが、構文@decoratorを使用する必要はありません。 デコレータは、ラムダ関数を呼び出す関数として機能します。
<lambda>は、ラムダ関数が識別される場所に表示されます。 一方、通常の関数、つまりadd_twoの場合は、明確に識別されます。
デバッグの目的で、ラムダ関数をこのように装飾できます。
閉鎖
PythonのClosure()は、関数で使用されるパラメーターを除く自由変数が、関数のスコープ内で定義された特定の値にバインドされる関数として定義されます。 どこからでもクロージャを呼び出すことができます。 PythonのLambda関数は、通常の関数がクロージャとして機能するように、クロージャとして機能できます。
ラムダ関数の使用
- 関数を短時間使用する必要がある場合は常に、ラムダ関数が使用されます。
- 関数を高階関数の関数に渡すために、ラムダ関数が適用されます。 関数は、これらの高階関数に引数として渡されます。
- Pythonのラムダ関数は、map()などの他の組み込み関数と一緒に使用できます。
ラムダ関数のテスト
モジュールdoctestおよびunittestを使用することで、Pythonのラムダ関数をテストできます。
- Unittestモジュールは、通常の関数と同様にラムダ関数をテストします。
- doctestモジュールの場合、テストを実行するためにdocstringからPythonコードが抽出されます。 ラムダ関数の構文では、 docstringは許可されていません。 ただし、名前が付けられているラムダの_doc_要素に文字列を割り当てることができます。
PythonLambda関数の例
以下のコードでは、引数が返される場所に「identity」という名前の関数が定義されています。 これは、キーワード「def」を使用することにより、Pythonの標準関数として定義されています。
>>> def Identity(x);
…..xを返す
ここで、xは関数「identity」によって引数として扱われ、呼び出されると引数を返します。
ラムダを使用して同じコードを書くと、次のようになります。
ラムダx:x
式は3つの部分で構成されます。キーワードとしてのLambda、バインドされた変数であるx、およびコードの本体であるXです。
- 束縛変数は、ラムダ関数に渡される引数を指します。 ただし、自由変数は束縛されておらず、式の本体で参照できる変数です。 定数は、関数のスコープで定義されている1つまたは複数の自由変数にすることができます。
上記の式は、次のように詳しく説明できます。
>>>ラムダx:x + 1
ここで、関数は引数に1を加算しています。 関数は、括弧を使用して引数とともに両方の関数を囲みながら、引数に追加できます。
>>>(ラムダx:x + 1)(2)
3
式の値を計算するために、削減戦略が適用されます。 同様に、上記の例では、バインドされた変数「x」を引数2に置き換えることができます。
(ラムダx:x + 1)(2)=ラムダ2:2 + 1
= 2 + 1
= 3
ラムダ関数は式であり、名前付けを行うことができ、上記のコードは次のように書き直すことができます。
>>> add_one = Lambda x:x + 1
>>> add_one(2)
3
これは、次のように書くのと同じです。
def add_one(x):
x+1を返す
ラムダ関数は単一の引数を取ります。 また、 Pythonでラムダ関数を定義している間、関数を括弧で囲むことはありません。
Pythonラムダ関数に複数の引数を渡す場合、引数はリストされ、コンマ(、)を使用して区切られます。 引数をリストするときは、括弧を付けないでください。 マルチ引数関数の例を以下に示します。
ここでは、full_nameの下のラムダ関数によって2つの引数が取られます。 文字列は、最初と最後のパラメーターを補間する関数によって返されます。 このコードは、ラムダ関数を定義している間、括弧を使用しなかったことを示しています。 ラムダ関数の呼び出しは、Pythonの標準関数の呼び出しと同じ方法に従います。つまり、引数を囲む括弧を使用します。
filter()を使用したPythonラムダ関数
Pythonでは、関数filter()は、引数をリストおよび関数として受け入れます。 リストのアイテムを介して、新しいアイテムのリストを返す関数を呼び出すことができます。 この新しく作成されたリストの関数はTrueと評価されます。
リストに含まれる偶数をフィルタリングするために使用されるfilter()関数の例を以下に示します。
ソース
プログラムによって生成される出力は、新しいリスト[4、6、8、12]です。
map()を使用したPythonラムダ関数
リストと関数は、python map()関数の引数として使用されます。 リストに含まれるすべてのアイテムは、関数によって返されるアイテムを含む新しく作成されたリストを返す関数を呼び出します。
結論
Pythonラムダ関数は、単一行で名前なしで宣言される関数、つまり無名関数です。 いくつかの引数を、1つの式のみを持つことができるラムダ関数に渡すことができます。 ラムダ関数を引数として他の関数に渡すことができる場合があります。 Pythonでキーワード「def」を使用して定義された関数は、通常の関数として動作できます。
したがって、この記事では、Pythonでのラムダ関数の概念、他の関数とのアプリケーション、およびいくつかの例について説明しました。 プログラミング言語の専門知識を習得し、コーディングスキルを習得することにさらに興味がある場合は、 upGradが提供するコース「データサイエンスのエグゼクティブPGプログラム」を確認できます。 これは、データサイエンスでコーディングのスキルを習得したい、21〜45歳以内のすべてのエントリーレベルの専門家向けに特別に設計されています。 夢に向かって一歩踏み出す気があるなら、前に出て、コースの利点を見てください。 実践的な業界プロジェクトでは、IIIT-Bが提供するコースは、お客様のニーズを満たし、今後のトップ業界に備えるように設計されています。
正規関数とラムダ関数の違いは何ですか?
Pythonの関数は、defキーワードを使用して定義されていることがわかっています。 同様に、ラムダ関数はlambdaキーワードを使用して定義されます。 次の例を検討して、2つの違いを深く理解してください。
#通常の関数def sq(x):return x * x#ラムダ関数lambda_sq = lambda x:x * x#通常の呼び出し#定義された関数print(sq(10))#ラムダ関数print(lambda_sq(10))を使用}
上記の例は、数値の2乗を計算する2つの関数を示しています。 ラムダがない場合は、関数sq(x)を作成してから、二乗を返す必要があります。 一方、ラムダでは、関数全体が1行にまとめられています。 Lambdaはreturnステートメントを必要としません。