はじめに
ワンライナーで関数を簡潔に書くことができ、可読性の向上に寄与できる Lambda 式が私は好きです。
この記事では、Python での Lambda 式の使い方や注意点をまとめてみました。
Lambda 式の概要
Python の Lambda 式は、無名関数(名前を持たない関数)を簡単に作成するためのシンタックスです。Lambda 式は一般的な関数定義に比べて短く、簡潔なに記述できるため、コードの可読性が向上し、短い関数を定義する際に非常に便利です。ただし、複雑な関数を作成する場合には適していません。
Lambda 式の基本構文
以下は、簡単な Lambda 式の例です。
この例では、2 つの数値を引数に取り、それらの和を返す Lambda 式を定義しています。
Lambda 引数:処理内容 というような書き方をします。
add = lambda x, y: x + y
print(add(3, 4)) # 7
上記は引数を受け取る例ですが、もちろん引数なしも可能です。
say_hello = lambda: "Hello lambda"
print(say_hello()) # Hello lambda
Lambda 式の一般的な使用例
先ほどの例は、基本構文するための例でした。
次に具体的な使用例を紹介します。
リストや辞書のソートにおけるキー関数としての使用
たとえば sorted 関数の引数として Lambda 式を使うことができます。
sorted 関数は、イテラブルオブジェクト(リスト、タプル、セット、辞書など)をソートして、新しいリストを返す関数です。
以下は基本構文です。
sorted(iterable, key=None, reverse=False)
sorted 関数はキーワード引数:key にソート対象の要素を比較するためのキーを返す関数を指定します。
ここに Lambda 式を使用できます。
実際に Lambda 式を使用しない場合とする場合で見比べてみます。
以下の例は,各要素の数値を大きい順に並べた処理です。
#Lambda式を使用しない場合(関数で記述した場合)
def get_student_score(student):
return student[1]
students = [("Alice", 90), ("Bob", 85), ("Charlie", 92)]
sorted_students = sorted(students, key=get_student_score, reverse=True)
print(sorted_students) #[('Charlie', 92), ('Alice', 90), ('Bob', 85)]
#Lambda式を使用した場合
students = [("Alice", 90), ("Bob", 85), ("Charlie", 92)]
sorted_students = sorted(students, key=lambdax: x[1], reverse=True)
print(sorted_students) #[('Charlie', 92), ('Alice', 90), ('Bob', 85)]
関数を定義しなくていいのでスッキリかけました。
高階関数への適用
Lambda 式は、高階関数(他の関数を引数に取る関数)に渡すことができます。
以下は、map、filter、および reduce 関数に Lambda 式を適用する例です。
numbers = [1, 2, 3, 4, 5]
# map関数
squares = list(map(lambda x: x**2, numbers))
print(squares) # [1, 4, 9, 16, 25]
# filter関数
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4]
# reduce関数
from functools import reduce
product = reduce(lambda x, y: x * y, numbers)
print(product) # 120
Lambda 式を使用する上での注意点
Lambda 式は簡潔に記述でき可読性の向上に寄与できますが、Lambda 式で書けるなら全て Lambda 式で書けばいいというわけではありません。
以下に Lambda 式を使用する上の注意点をまとめます。
1 行での記述が必要
Lambda 式は、一行で記述しなければならないため、複雑な処理には向いていません。複雑な処理を必要とする場合は、通常の関数定義を使用したほうが良いです。
複雑な処理には向かない
前述の通り、Lambda 式は 1 行での記述が必要であるため、複雑な処理には向いていません。条件分岐やループ処理など、複数行で記述が必要な処理は通常の関数定義を使用したほうが良いです。
可読性の低下のリスク
Lambda 式は短縮された構文を使用しているため、過度に使用するとコードの可読性が低下することがあります。使用する際はコメントを添えて可読性の維持も心がけるべきです。
まとめ
Lambda 式の使用方法、注意点をまとめてみました。
便利ですが使いすぎはよくありません。
良い塩梅で使えるようになりたいですね。