Python ラムダ関数

Python ラムダ関数 匿名関数であるとは、関数に名前がないことを意味します。私たちがすでに知っているように、 確かに キーワードは、Python で通常の関数を定義するために使用されます。同様に、 ラムダ キーワードは匿名関数を定義するために使用されます。 パイソン

Python ラムダ関数の構文

構文: ラムダ引数 : 式

  • この関数には任意の数の引数を指定できますが、評価されて返される式は 1 つだけです。
  • 関数オブジェクトが必要な場合はどこでもラムダ関数を自由に使用できます。
  • ラムダ関数は構文的に 1 つの式に制限されていることを理解しておく必要があります。
  • 関数内の他のタイプの式に加えて、プログラミングの特定の分野でさまざまな用途があります。

Python ラムダ関数の例

この例では、ラムダ関数を定義しました( アッパー ) を使用して文字列を大文字に変換します。 アッパー()

このコードは、という名前のラムダ関数を定義します。 upper> これは文字列を引数として受け取り、それを使用して大文字に変換します。 upper()> 方法。次に、このラムダ関数を文字列「techcodeview.com」に適用し、結果を出力します。

Python3




str1> => 'techcodeview.com'> upper> => lambda> string: string.upper()> print> (upper(str1))>

出力:

GEEKSFORGEEKS 

Python での Lambda 関数の使用

Python ラムダ関数の実際の使用法をいくつか見てみましょう。

Python ラムダ関数を使用した条件チェック

ここで、 「フォーマット数値」 ラムダ関数を呼び出し、num が操作を実行するためのパラメータとして渡されます。

Python3




format_numeric> => lambda> num: f> '{num:e}'> if> isinstance> (num,> int> )> else> f> '{num:,.2f}'> print> (> 'Int formatting:'> , format_numeric(> 1000000> ))> print> (> 'float formatting:'> , format_numeric(> 999999.789541235> ))>

出力:

Int formatting: 1.000000e+06 float formatting: 999,999.79 

Lambda関数とdef定義関数の違い

このコードは、次の両方を使用してキューブ関数を定義します。 ' def'> キーワードとラムダ関数。両方のアプローチを使用して、指定された数値 (この場合は 5) の 3 乗を計算し、結果を出力します。出力は両方とも 125 です。 ' def'> ラムダ関数とラムダ関数を比較し、同じ立方体計算を実現できることを示しています。

Python3




def> cube(y):> > return> y> *> y> *> y> lambda_cube> => lambda> y: y> *> y> *> y> print> (> 'Using function defined with `def` keyword, cube:'> , cube(> 5> ))> print> (> 'Using lambda function, cube:'> , lambda_cube(> 5> ))>

出力:

Using function defined with `def` keyword, cube: 125 Using lambda function, cube: 125 

上の例でわかるように、両方とも 立方体() 機能と ラムダキューブ() 関数は意図したとおりに同じように動作します。上記の例をもう少し分析してみましょう。

ラムダ関数あり

ラムダ関数なし

何らかの値を返す単一行の時々ステートメントをサポートします。 関数ブロック内の任意の数の行をサポート
短い操作やデータ操作の実行に適しています。 複数行のコードが必要な場合に適しています。
lambda 関数を使用すると、コードの可読性が低下する場合があります。 読みやすくするために、コメントと関数の説明を使用できます。

Python ラムダ関数の実際的な使用法

リスト内包表記を備えた Python Lambda 関数

内部の反復ごとに、 リスト内包表記 では、デフォルトの引数 x (x は反復内の現在の項目) を持つ新しいラムダ関数を作成しています。その後、for ループ内で、次を使用してデフォルトの引数を持つ同じ関数オブジェクトを呼び出します。 アイテム() そして目的の値を取得します。したがって、 is_even_list ラムダ関数オブジェクトのリストを保存します。

Python3




is_even_list> => [> lambda> arg> => x: arg> *> 10> for> x> in> range> (> 1> ,> 5> )]> for> item> in> is_even_list:> > print> (item())>

出力:

10 20 30 40 

if-else を使用した Python Lambda 関数

ここで使用しているのは、 マックス ラムダ関数を使用して、2 つの整数の最大値を見つけます。

Python3




Max> => lambda> a, b : a> if> (a>b)>>

出力:

2 

複数のステートメントを含む Python Lambda

Lambda 関数では複数のステートメントを使用できませんが、2 つの Lambda 関数を作成し、もう一方の Lambda 関数を最初の関数のパラメーターとして呼び出すことができます。ラムダを使用して 2 番目に最大の要素を見つけてみましょう。

このコードは、と呼ばれるサブリストのリストを定義します。 ' List'> 。ラムダ関数を使用して各サブリストを並べ替え、各サブリスト内で 2 番目に大きい要素を見つけます。結果は 2 番目に大きい要素のリストとなり、出力されます。出力には、元のリストの各サブリストから 2 番目に大きい要素が表示されます。

Python3




List> => [[> 2> ,> 3> ,> 4> ],[> 1> ,> 4> ,> 16> ,> 64> ],[> 3> ,> 6> ,> 9> ,> 12> ]]> sortList> => lambda> x: (> sorted> (i)> for> i> in> x)> secondLargest> => lambda> x, f : [y[> len> (y)> -> 2> ]> for> y> in> f(x)]> res> => secondLargest(> List> , sortList)> print> (res)>

出力:

[3, 16, 9] 

Lambda 関数は、次のような組み込み関数と一緒に使用できます。 フィルター() 地図() そして 減らす()

lambda() 関数と filter() の使用

Python の filter() 関数は、関数とリストを引数として受け取ります。これにより、関数が True を返すシーケンス シーケンスのすべての要素をフィルターで除外するエレガントな方法が提供されます。以下は、入力リストから奇数を返す小さなプログラムです。

filter() とラムダ関数を使用して奇数をすべて除外します

ここで、lambda x: (x % 2 != 0) は、x が偶数でない場合に True または False を返します。 filter() は生成された要素のみを保持するため、 真実 したがって、生成された奇数をすべて削除します。 間違い

Python3




li> => [> 5> ,> 7> ,> 22> ,> 97> ,> 54> ,> 62> ,> 77> ,> 23> ,> 73> ,> 61> ]> final_list> => list> (> filter> (> lambda> x: (x> %> 2> !> => 0> ), li))> print> (final_list)>

出力:

[5, 7, 97, 77, 23, 73, 61] 

ラムダ関数と filter() 関数を使用して、年齢が 18 歳以上のすべての人々をフィルタリングします

このコードは、ラムダ関数と ' filter'> 関数。次に、成人の年齢のリストを出力します。出力には、18 歳以上の個人の年齢が表示されます。

Python3




ages> => [> 13> ,> 90> ,> 17> ,> 59> ,> 21> ,> 60> ,> 5> ]> adults> => list> (> filter> (> lambda> age: age>>> 18> , ages))> print> (adults)>

出力:

[90, 59, 21, 60] 

map() での lambda() 関数の使用

Pythonのmap()関数は引数として関数とリストを受け取ります。この関数はラムダ関数とリストを使用して呼び出され、各項目に対してその関数によって返されたすべてのラムダ変更された項目を含む新しいリストが返されます。例:

lambda と map() 関数を使用してリストのすべての要素を 2 で乗算します。

このコードは、ラムダ関数を使用してリスト内の各要素を 2 倍にします。 ' map'> 関数。次に、2 倍の要素を含む新しいリストを出力します。出力には、元のリストの各要素が 2 倍されて表示されます。

Python3




li> => [> 5> ,> 7> ,> 22> ,> 97> ,> 54> ,> 62> ,> 77> ,> 23> ,> 73> ,> 61> ]> final_list> => list> (> map> (> lambda> x: x> *> 2> , li))> print> (final_list)>

出力:

[10, 14, 44, 194, 108, 124, 154, 46, 146, 122] 

lambdaとmap()関数を使用してリストのすべての要素を大文字に変換します

このコードは、ラムダ関数を使用して動物名のリストを大文字に変換します。 ' map'> 関数。次に、動物の名前を大文字でリストを印刷します。出力では、動物の名前がす​​べて大文字で表示されます。

Python3




animals> => [> 'dog'> ,> 'cat'> ,> 'parrot'> ,> 'rabbit'> ]> uppered_animals> => list> (> map> (> lambda> animal: animal.upper(), animals))> print> (uppered_animals)>

出力:

['DOG', 'CAT', 'PARROT', 'RABBIT'] 

reduce() での lambda() 関数の使用

減らす() Python の function は引数として関数とリストを受け取ります。この関数はラムダ関数と反復可能関数で呼び出され、新しい縮小された結果が返されます。これにより、反復可能なペアに対して反復操作が実行されます。 reduce() 関数は以下に属します。 関数ツール モジュール。

ラムダとreduce()関数を使用したリスト内のすべての要素の合計

このコードは、次のメソッドを使用してリスト内の要素の合計を計算します。 ' reduce'> からの関数 ' functools'> モジュール。輸入する ' reduce'> 、リストを定義し、一度に 2 つの要素を追加するラムダ関数を適用し、リスト内のすべての要素の合計を出力します。出力には、計算された合計が表示されます。

Python3




from> functools> import> reduce> li> => [> 5> ,> 8> ,> 10> ,> 20> ,> 50> ,> 100> ]> sum> => reduce> ((> lambda> x, y: x> +> y), li)> print> (> sum> )>

出力:

193 

ここでは、前の 2 つの要素の結果が次の要素に追加され、これが (((((5+8)+10)+20)+50)+100) のようにリストの最後まで続きます。

ラムダ関数とreduce()関数を使用してリスト内の最大要素を検索します

コードでは、 ' functools'> リスト内の最大要素を見つけるモジュール ( ' lis'> ) を採用することで、 ' reduce'> 関数とラムダ関数。次に、最大の要素 (この場合は 6) が出力されます。

Python3




import> functools> lis> => [> 1> ,> 3> ,> 5> ,> 6> ,> 2> , ]> print> (> 'The maximum element of the list is : '> , end> => '')> print> (functools.> reduce> (> lambda> a, b: a> if> a>b>>

出力:

The maximum element of the list is : 6