この記事では、Pythonで関数を簡潔に定義できる『lambda式(ラムダ式、無名関数)』について、以下の内容をサンプルコードを用いて分かりやすく解説します。
lambda
式(ラムダ式、無名関数)とはdef
文とlambda
式の違いlambda
式の構文lambda
式の使いどころ
lambda式(ラムダ式、無名関数)とは
lambda
式は、Pythonで無名関数を作成するための構文です。通常、関数はdef
文を使って名前を付けて定義しますが、lambda
式を使うことでその場で簡潔に関数を定義できます。特に、関数に名前を付ける必要がない場合や、短い処理を一時的に行いたいときに便利です。
def文とlambda式の違い
def
文とlambda
式には、次のような違いがあります。
def
文- 名前付きの関数を宣言するためのステートメントです。関数名を付けて事前に定義します。
lambda
式- その場で1行で無名関数を定義できる式です。名前を付ける必要がなく、一時的に関数を作成するのに便利です。
簡単なサンプルコードで、def
文とlambda
式の違いを見てみましょう。
def文を使った2乗を求める関数
通常の関数はdef
文を使って次のように定義します。
def square(x):
return x * x
print(square(3)) # 出力: 9
lambda式を使った2乗を求める関数
一方、lambda
式を使うと、同じ処理をもっとシンプルに記述できます。
square = lambda x: x * x
print(square(3)) # 出力: 9
lambda
式を使うと関数名を付ける必要がなく、短く記述できることがわかります。
PEP8でのlambda式に関する注意点
Pythonのコーディング規約PEP8では、lambda
式に名前を付けることは非推奨とされています。lambda
式は本来、短い処理を匿名で書くためのものであり、関数に名前を付ける場合はdef
文を使うべきとされています。例えば、自動チェックツールでは次のような警告が出ることがあります。
Do not assign a lambda expression, use a def
この警告が示す通り、名前付きの関数を作成する場合は、def
文を使う方が望ましいとされています。ただし、これはコーディング規約上の推奨であり、文法的にはエラーではなく、実行可能です。
lambda式の構文
lambda
式の基本的な構文は次の通りです。
lambda 引数: 処理内容
引数は複数指定することができ、処理内容は1行で書きます。例えば、2つの数を掛け算するlambda
式は次のように記述します。
multiply = lambda x, y: x * y
print(multiply(2, 5)) # 出力: 10
注意点として、lambda
式は複数行にわたる処理を定義することはできません。複雑な処理にはdef
を使う方が適しています。
lambda式の使いどころ
lambda
式は関数に名前を付ける必要がない一時的な処理や、短い処理を簡潔に書きたい場合に便利です。特に、filter
関数、map
関数、sorted
関数など、関数を引数に取る関数と組み合わせて使われることが多いです。具体的な使用例をいくつか見ていきましょう。
リストの要素を変更する
例えば、リストの要素をすべて2倍にしたいとき、lambda
式を使って次のように記述できます。
numbers = [1, 2, 3]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # 出力: [2, 4, 6]
これをdef
文で記述すると、以下のようになります。
def double(x):
return x * 2
numbers = [1, 2, 3]
doubled = list(map(double, numbers))
print(doubled) # 出力: [2, 4, 6]
lambda
式の方が短く、シンプルに書けることがわかります。
条件に基づいて要素を抽出する
数値リストから特定の条件に合う要素だけを抽出する際にも、lambda
式が役立ちます。
numbers = [10, 25, 30, 45]
filtered = list(filter(lambda x: x > 20, numbers))
print(filtered) # 出力: [25, 30, 45]
これをdef
文で記述すると、以下のようになります。
def is_greater_than_20(x):
return x > 20
numbers = [10, 25, 30, 45]
filtered = list(filter(is_greater_than_20, numbers))
print(filtered) # 出力: [25, 30, 45]
lambda
式を使うことで、条件に合った要素を簡潔に抽出できます。
リストをソートする
lambda
式は、リストをソートする際にも便利です。たとえば、次のように学生のリストを年齢でソートできます。
students = [('John', 25), ('Alice', 22), ('Bob', 23)]
sorted_students = sorted(students, key=lambda student: student[1])
print(sorted_students) # 出力: [('Alice', 22), ('Bob', 23), ('John', 25)]
これをdef
文で記述すると、以下のようになります。
def get_age(student):
return student[1]
students = [('John', 25), ('Alice', 22), ('Bob', 23)]
sorted_students = sorted(students, key=get_age)
print(sorted_students) # 出力: [('Alice', 22), ('Bob', 23), ('John', 25)]
このように、lambda
式を使うとリストのソート処理を簡潔に記述することができます。
本記事のまとめ
この記事では『lambda式(ラムダ式、無名関数)』について、以下の内容を説明しました。
lambda
式(ラムダ式、無名関数)とはdef
文とlambda
式の違いlambda
式の構文lambda
式の使いどころ
お読み頂きありがとうございました。