Python高度文法のLambda関数
Python では、lambda
関数は匿名関数とも呼ばれ、単純な関数を定義するためのショートカットです。lambda
関数は、通常の関数と同様に、任意の数の引数を受け取ることができますが、式を 1 つだけ持つことができます。lambda
この記事では、Pythonの関数を豊富な例と解説とともに詳しく紹介します。
ラムダ関数の基本的な構文
lambda
関数の基本的な構文は次のとおりです。
lambda arguments: expression
ここで、arguments
は 1 つ以上のパラメータ、 はexpression
それらのパラメータに関する式です。lambda
関数の戻り値は のexpression
値です。
たとえば、次のlambda
関数は引数を 1 つ取りx
、x
正方形を返します。
square = lambda x: x ** 2
print(square(5)) # Output: 25
ラムダ関数の目的
lambda
関数は通常、小さな関数が必要だが、関数を定義しdef
たく。たとえば、関数は、や などlambda
の高階関数の引数としてよく使用されます。map()
filter()
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]
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
関数は単純な関数を迅速に定義するのに役立ちますが、いくつかの制限もあります。
lambda
関数には式を 1 つだけ含めることができ、複雑なロジックや複数のステートメントを含めることはできません。lambda
関数には、if/else
、などのステートメント ブロックを含めることはできません。for
while
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 つしか持てないため、複雑なロジックを実装できません。
- 可読性: ラムダ関数が乱用されたり、より複雑なロジックの実装に使用されたりすると、コードの可読性が低下する可能性があります。
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 つしか持てないため、複雑なロジックを実装できません。
- 可読性: ラムダ関数が乱用されたり、より複雑なロジックの実装に使用されたりすると、コードの可読性が低下する可能性があります。
複数のパラメータを持つ Lambda 関数
これまでに見た関数はすべて、lambda
1 つまたは 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
と がありy
、y
デフォルト値は 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
今すぐいくつかの関数を書いてみて、何ができるかを確認してください。