(最終更新日:2023年7月)
✔このような方へ向けて書かれた記事となります
「PythonのLambda関数って何をするものだろう?」
「PythonのLambda関数の書き方を理解したい」
「PythonのLambda関数の実際の使い方を知りたい」
✔当記事を通じてお伝えすること
- PythonのLambda関数の基本的な知識
- PythonのLambda関数の書き方及びその応用法
- PythonのLambda関数の活用例
当記事では、PythonのLambda関数の基本からその応用法、具体的な活用例まで鮮明に解説しています。
この機会にPythonのLambda関数の理解を深めてみませんか?
ぜひ最後までご覧ください。
Pythonのlambda関数の基本
こちらでは、Pythonのlambda関数における基本をご覧いただきます。
基本概念を理解のうえ、具体的なコードに進みましょう。
- Pythonのlambda関数とは?
- lambda関数の基本構文
- lambda関数の実例
Pythonのlambda関数とは?
Pythonのlambda
関数は、名前を付けずに定義できる小さな無名関数を作成するための方法のこと。
lambda
関数の目的には以下のようなものがあります。
- コードの簡素化
- ほかの関数への引数として使う
defを使い定義する必要がないため、頻繁に使わない簡単な関数は、lamdaで作ることをおすすめします。
lambda関数の基本構文
基本的な構文は次のとおりです。
lambda <lambda関数に渡す引数> : <lambda関数本体の条件式>
引数は複数設定することもでき、その場合はカンマで区切ります。
条件式には、複数の式やステートメント、ループなどは書けません。
複雑な条件を設定する場合には、通常のdef
を用いた関数定義を使用しましょう。
lambda関数の実例
以下に具体的な例を示します。
add = lambda x, y: x + y
print(add(5, 3)) # 結果は8
2つの数値を引数として受け取り、それらを加算するlambda
関数を定義。
本来lambda
関数は無名関数ですが、addという変数にlambdaを入れることで、名前をつけています。
ラムダ関数とdef文の比較
こちらでは、lambda関数とdef文の比較を行い、それぞれの特性と違いを理解していきましょう。
- lambda関数の概要
- lambdaとdef文の主な違い
- lambdaとdef文の具体的対応関係
lambda関数の概要
lambda関数は一行で記述できる無名関数で、以下の形式で表現されます。
lambda <引数>: <条件式>
たとえば、引数の二乗を返すlambda関数は以下のようになります。
square = lambda x: x ** 2
print(square(5)) # 出力: 25
lambdaとdef文の主な違い
lambda関数とdef文で定義された関数との間には、いくつかの大きな違いがあります。
- 名前: lambda関数は無名関数で、それ自体が式。一方、def文で定義された関数は名前が必要です。ただし変数に入れることで、lambda関数にも名前が付けられる。
- コードの長さ: lambda関数は一行で表現されることが多いですが、def文では複数行に渡る定義が可能。
- 戻り値: lambda関数は自動的に結果を返しますが、def文では
return
文を使用して結果を明示的に返す必要がある。
lambdaとdef文の具体的対応関係
lambda関数とdef文との間には、一部の対応関係があります。
例えば、次のdef文によって定義される関数は、下のlambda関数と同様の結果を返します。
def文による関数はこちら。
def square(x):
return x ** 2
print(square(5)) # 出力: 25
同様の操作をおこなうlambda関数です。
square = lambda x: x ** 2
print(square(5)) # 出力: 25
lambda関数の使い方
次に、lambda関数の具体的な使い方について説明します。
ここでは、基本的な文法からif文を使用した場合まで、さまざまな例を用いて説明します。
- 基本的なlambda関数の文法
- lambdaでif文を使う方法
基本的なlambda関数の文法
lambda関数の基本的な使い方は非常に簡単。
以下の例は、文字列を引数として受け取り、その文字列の長さを返すものです。
length = lambda s: len(s)
print(length("Hello")) # 結果は5
この例では、lengthという名前のlambda関数が定義され、引数sを受け取り、len関数で長さを返します。
この関数はその場で定義され、必要な場所で呼び出せるのです。
lambdaでif文を使う方法
lambda関数の中でif文を使うことも可能。
以下の例は、入力された数が偶数であれば’True’を、奇数であれば’False’を返すlambda関数です。
is_even = lambda x: True if x % 2 == 0 else False
print(is_even(4)) # Output: True
print(is_even(5)) # Output: False
lambda関数は短い関数や一時的な関数を記述するための強力なツールです。
lambda関数の活用例
こちらでは、lambda関数の具体的な活用例を見てみましょう。
lambda関数は整列、探索、高階関数と組み合わせることで、より強力な表現力を発揮します。
- 整列と探索関数におけるlambdaの使用例
- 高階関数とlambdaの組み合わせ例
整列と探索関数におけるlambdaの使用例
lambda関数は、リストの整列や特定の条件に基づく要素の探索に活用できます。
以下は、リストの整列にlambda関数を使用した例です。
# List of tuples
list_of_tuples = [(1, 'one'), (3, 'three'), (2, 'two')]
# Sort by the second element of tuple
list_of_tuples.sort(key=lambda x: x[1])
print(list_of_tuples) # Output: [(1, 'one'), (3, 'three'), (2, 'two')]
key
引数にlambda関数を渡してリストをソート。
lambda関数x: x[1]
は、ソートの基準をタプルの第二要素に設定しています。
高階関数とlambdaの組み合わせ例
lambda関数は高階関数(他の関数を引数として受け取る関数)と組み合わせることで、コードの簡潔性と可読性を一層向上させます。
具体的には、map()
関数やfilter()
関数などと組み合わせて使用します。
- map()関数とlambdaの活用
- filter()関数とlambdaの活用
map()関数とlambdaの活用
map()
関数は、すべての要素に対して関数を適用し、その結果を返すもの。
lambda関数と組み合わせることで、簡潔なコードを書けるようになります。
例えば以下は、リストの全要素を二乗する例です。
# 数字のリスト
numbers = [1, 2, 3, 4, 5]
# mapとlambdaですべてを2乗したリストを返す
squares = list(map(lambda x: x ** 2, numbers))
print(squares) # 出力: [1, 4, 9, 16, 25]
この例では、map()
関数とlambda関数を使用して、リストnumbers
の全ての要素を二乗し、新たなリストsquares
を生成しています。
filter()関数とlambdaの活用
filter()
関数は、与えられた関数の条件を満たす要素だけをフィルタリングして返します。
lambda関数と組み合わせることで、特定の条件を満たす要素を簡単に抽出できます。
以下の例では、リストから偶数だけを抽出します。
# 数字のリスト
numbers = [1, 2, 3, 4, 5]
# filter()とlambdaで偶数だけ抽出
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens) # 出力: [2, 4]
filter()
関数とlambda関数を使用して、リストnumbers
から偶数だけを抽出し、新たなリストevens
を生成しています。
ラムダ関数とリスト内包表記
lambda関数はリスト内包表記と共に使用することも多いです。
なぜならlambda関数は「インライン関数」、つまりコード内の任意の場所で定義でき、直ちに実行できるから。
例えば、次のようにリストの各要素を二乗する操作を、リスト内包表記とlambda関数を使用して一行で書けます。
numbers = [1, 2, 3, 4, 5]
squares = [(lambda x: x ** 2)(x) for x in numbers]
print(squares) # 出力: [1, 4, 9, 16, 25]
リスト内包表記の中でlambda関数が定義され、リストnumbers
の各要素に適用。
その結果として新しいリストsquares
が生成され、これはnumbers
の各要素を二乗した値を格納しています。
内包表記について詳しく知りたい方はこちらをどうぞ。
ラムダ関数の注意点とエチケット
lambda関数は強力なツールですが、その利用には注意が必要です。
適切に活用するためのヒントや、コーディングの可読性との関連性を理解しましょう。
- lambda関数を適切に活用するためのヒント
- コーディングの可読性とlambda関数の使い方
- PEP8によるlambda関数の使用ガイドライン
lambda関数を適切に活用するためのヒント
lambda関数は簡潔なコードを書くための便利なツールですが、適切な使い方をしないとコードの可読性を下げてしまう可能性があります。
以下のようなガイドラインを考慮して利用してください。
- lambda関数は、短くて一時的な関数に最適
- 複雑な関数や再利用可能な関数にはdef文を使用
- 可能な限りlambda関数はシンプルに保つ
コーディングの可読性とlambda関数の使い方
lambda関数を使用する主な目的の一つは、コードの簡潔性と可読性の向上です。
しかし、過度に複雑なlambda関数を使用すると、その目的は逆に阻害されてしまいます。
そのため、lambda関数は可能な限り簡潔に保ち、複雑なロジックは通常の関数定義によって実装することが、コードの可読性を維持するために重要です。
PEP8によるlambda関数の使用ガイドライン
Pythonの公式スタイルガイドであるPEP8では、lambda関数の利用についていくつかの指針を提供しています。
その中でも、特に重要なのは「lambda関数は短い関数や一時的な関数に使うべきであり、複雑なコードや再利用可能な関数を書く場合はdef文を使用するべき」という指針です。
これは、lambda関数の主な目的がコードの簡潔性と可読性の向上であることに由来します。
まとめ
当記事の内容をまとめます。
- Pythonのlambda関数は強力なツールで、一時的な短い関数の作成に適している
- 複雑な処理や再利用を前提とした関数には、通常の関数定義がおすすめ
- lambda関数は高階関数と組み合わせたり、リスト内包表記と共に用いたりすることでその真価を発揮する
慣れるまでわかりにくいlambda関数ですが、以下の構文を頭にいれて、たくさんコードを書いてみましょう。
lambda 引数: 条件式
当記事を読んで、Pythonのlambda関数の使い方について理解が深まったことを願っています。
適切に使用すれば、lambda関数はあなたのPythonコードをより簡潔で効率的なものに変える強力なツールとなるでしょう。