Python高度文法のLambda関数

Python高度文法のLambda関数

Python では、lambda関数は匿名関数とも呼ばれ、単純な関数を定義するためのショートカットです。lambda関数は、通常の関数と同様に、任意の数の引数を受け取ることができますが、式を 1 つだけ持つことができます。lambdaこの記事では、Pythonの関数を豊富な例と解説とともに詳しく紹介します。
ここに画像の説明を挿入

ラムダ関数の基本的な構文

lambda関数の基本的な構文は次のとおりです。

lambda arguments: expression

ここで、argumentsは 1 つ以上のパラメータ、 はexpressionそれらのパラメータに関する式です。lambda関数の戻り値は のexpression値です。

たとえば、次のlambda関数は引数を 1 つ取りxx正方形を返します。

square = lambda x: x ** 2
print(square(5))  # Output: 25

ラムダ関数の目的

lambda関数は通常、小さな関数が必要だが、関数を定義しdefたく。たとえば、関数は、や などlambdaの高階関数の引数としてよく使用されますmap()filter()

  1. map(function, iterable)関数は関数と反復可能オブジェクトを受け取り、その関数を反復可能オブジェクトの各要素に適用する新しい反復子を返します。たとえば、次のコードは sum を使用してリスト内の各数値を 2 乗しますmap()lambda
numbers = [1, 2, 3, 4, 5]
squares = map(lambda x: x ** 2, numbers)
print(list(squares))  # Output: [1, 4, 9, 16, 25]
  1. filter(function, iterable)この関数は関数と反復可能オブジェクトも受け取り、True関数が値を返すすべての要素を含む新しい反復子を返します。たとえば、次のコードは と を使用してfilter()lambdaリスト内のすべての奇数を除外します。
numbers = [1, 2, 3, 4, 5]
odds = filter(lambda x: x % 2 != 0, numbers)
print(list(odds))  # Output: [1, 3, 5]

ラムダ関数とソート

lambda関数は、リストやその他のデータ構造の並べ替え操作にもよく使用されます。Python の組み込みsorted()関数とリストsort()メソッドはすべて、keyオプションのパラメーターという名前を提供します。これを使用して、並べ替えの基準を決定する関数を指定できます。

たとえば、要素が辞書であるリストがあり、辞書内の特定のキーの値で並べ替えたいとします。

students = [
    {
    
    'name': 'John', 'grade': 90},
    {
    
    'name': 'Jane', 'grade': 88},
    {
    
    'name': 'Dave', 'grade': 92},
]
# 使用lambda函数,按照'grade'键进行排序
students_sorted = sorted(students, key=lambda x: x['grade'])
print(students_sorted) 
# Output: [{'name': 'Jane', 'grade': 88}, {'name': 'John', 'grade': 90}, {'name': 'Dave', 'grade': 92}]

この例では、lambda x: x['grade']関数は入力として辞書を受け取り、辞書内の「grade」キーに対応する値を返します。sorted()関数は、この戻り値を並べ替えの基準として使用します。

ラムダ関数の制限

lambda関数は単純な関数を迅速に定義するのに役立ちますが、いくつかの制限もあります。

  1. lambda関数には式を 1 つだけ含めることができ、複雑なロジックや複数のステートメントを含めることはできません。
  2. lambda関数には、if/elseなどのステートメント ブロックを含めることはできません。forwhile
  3. lambda関数は、外側のスコープ内の変数にアクセスできません (変数がグローバルでない限り)。

これらの制限にもかかわらず、lambda関数は軽量な関数が必要な場合には依然として非常に役立ちます。関数の使用をマスターすることはlambda、Python プログラミング スキルを向上させるのに非常に役立ちます。

lambda関数とreduce関数

Pythonモジュールは、シーケンスのすべての要素に逐次バイナリ関数を適用する関数をfunctools提供し、それによってシーケンスを 1 つの出力にマージします。reduce()この種の操作は通常、関数型プログラミング言語では非常に一般的であり、ラムダ関数の一般的なシナリオでもあります。

たとえば、リストのすべての要素の積を計算したい場合は、reduce()sum ラムダ関数を使用できます。

from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # Output: 120

この例では、lambda x, y: x * y関数は 2 つの引数を受け取り、その積を返します。reduce()関数はこの関数を使用してリストの要素を順番に処理し、その積を計算します。

ラムダ関数の長所と短所

この記事を終える前に、ラムダ関数の長所と短所をまとめてみましょう。

アドバンテージ:

  1. 簡潔さ: ラムダ関数を使用すると、1 行のコードで関数を定義できるため、コードがより簡潔になります。
  2. 利便性: ラムダ関数は、事前に定義することなく、パラメーターとして高階関数に直接渡すことができます。
  3. 単純なロジックに適しています: 単純なロジックの関数の場合、定義定義された関数よりもラムダ関数を使用する方が直感的です。

欠点:

  1. 機能の制限: ラムダ関数は式を 1 つしか持てないため、複雑なロジックを実装できません。
  2. 可読性: ラムダ関数が乱用されたり、より複雑なロジックの実装に使用されたりすると、コードの可読性が低下する可能性があります。

lambda関数とreduce関数

Pythonモジュールは、シーケンスのすべての要素に逐次バイナリ関数を適用する関数をfunctools提供し、それによってシーケンスを 1 つの出力にマージします。reduce()この種の操作は通常、関数型プログラミング言語では非常に一般的であり、ラムダ関数の一般的なシナリオでもあります。

たとえば、リストのすべての要素の積を計算したい場合は、reduce()sum ラムダ関数を使用できます。

from functools import reduce

numbers = [1, 2, 3, 4, 5]
product = reduce(lambda x, y: x * y, numbers)
print(product)  # Output: 120

この例では、lambda x, y: x * y関数は 2 つの引数を受け取り、その積を返します。reduce()関数はこの関数を使用してリストの要素を順番に処理し、その積を計算します。

ラムダ関数の長所と短所

この記事を終える前に、ラムダ関数の長所と短所をまとめてみましょう。

アドバンテージ:

  1. 簡潔さ: ラムダ関数を使用すると、1 行のコードで関数を定義できるため、コードがより簡潔になります。
  2. 利便性: ラムダ関数は、事前に定義することなく、パラメーターとして高階関数に直接渡すことができます。
  3. 単純なロジックに適しています: 単純なロジックの関数の場合、定義定義された関数よりもラムダ関数を使用する方が直感的です。

欠点:

  1. 機能の制限: ラムダ関数は式を 1 つしか持てないため、複雑なロジックを実装できません。
  2. 可読性: ラムダ関数が乱用されたり、より複雑なロジックの実装に使用されたりすると、コードの可読性が低下する可能性があります。

複数のパラメータを持つ Lambda 関数

これまでに見た関数はすべて、lambda1 つまたは 2 つのパラメーターのみを取ります。ただし、lambda関数は任意の数の引数を受け入れることもできます。例えば:

f = lambda x, y, z: x + y + z
print(f(1, 2, 3))  # Output: 6

このlambda関数は 3 つのパラメータを受け取り、それらの合計を返します。

可変引数 (別名「varargs」) を使用することもできます。

f = lambda *args: sum(args)
print(f(1, 2, 3, 4, 5))  # Output: 15

このlambda関数は任意の数の引数を受け取り、その合計を返します。

ラムダ関数と関数型プログラミング

関数型プログラミングでは、関数は第一級市民とみなされ、変数に代入したり、パラメータとして他の関数に渡したり、他の関数から値として返すことができます。このプログラミング パラダイムは、副作用のない純粋な関数だけでなく、map()filter()、などのreduce()高次関数の使用を奨励します。

lambda関数は、Python の関数プログラミングの具体化です。lambda関数と高階関数を組み合わせることで、非常に簡潔で洗練されたコードを書くことができます。

たとえば、次のコードはmap()andlambda関数を使用して、リスト内のすべての要素を文字列に変換します。

numbers = [1, 2, 3, 4, 5]
strings = map(lambda x: str(x), numbers)
print(list(strings))  # Output: ['1', '2', '3', '4', '5']

一般に、lambda関数は Python の非常に強力な機能であり、これによりコードをより速く、より簡潔に記述することができます。ただし、lambda関数のロジックが複雑すぎると、コードの可読性が低下する可能性があることにも注意してください。したがって、lambda関数は単純なロジックを実装するために使用するのが最適です。

デフォルトの引数とキーワード引数

通常の関数と同様に、ラムダ関数にはデフォルトの引数とキーワード引数を指定できます。

f = lambda x, y=2, *, z=3: x + y + z
print(f(1))  # Output: 6
print(f(1, 4, z=5))  # Output: 10

この例では、lambda関数には 2 つの位置パラメータxと がありyyデフォルト値は 2 です。zはキーワード引数で、デフォルト値は 3 です。

ラムダ関数とデコレータ

Python では通常、デコレータはdef構文を使用して定義されますが、lambda関数を使用して単純なデコレータを作成することもできます。

たとえば、次のコードは、関数の結果を 2 で乗算するデコレータを定義します。

double_result = lambda f: lambda *args, **kwargs: 2 * f(*args, **kwargs)

@double_result
def add(x, y):
    return x + y

print(add(1, 2))  # Output: 6

この場合、double_result関数を受け取り、結果を 2 倍f返す新しい関数を返すデコレーターです。f

エピローグ

lambdaこの記事では、構文、目的、一般的な使用例など、Python の関数について詳しく説明します。lambda関数は、コードをより簡潔でエレガントにすることができる Python の強力なツールです。lambda関数には式を 1 つしか含めることができないなど、いくつかの制限がありますが、多くの場合、これで十分です

lambdaこの記事が Python の関数を理解して習得し、Python プログラミングの旅をよりスムーズにするのに役立つことを願っています。覚えておいてください、学ぶための最良の方法は実践することです。そのため、lambda今すぐいくつかの関数を書いてみて、何ができるかを確認してください。

おすすめ

転載: blog.csdn.net/qq_42076902/article/details/131256868