pythonのlambda(ラムダ式)の使い方について、サンプルコードを交えながら紹介します。
本記事では、下記の内容を紹介しています。
この記事で分かること
- lambda(ラムダ式)とは
- lambda(ラムダ式)の基本的な使い方
- lambda(ラムダ式)でのif文の使い方
- lambda(ラムダ式)の使いどころ、メリット
スポンサーリンク
lambda(ラムダ式)とは
lambda(ラムダ式)は、無名関数のことを指します。
Pythonで関数を定義する場合は、
"def文"を用いて、関数に "名前" を付けて定義しますが、
lambda(ラムダ式)を用いると、"名前" をつけずに関数を作成することができます。
lambda(ラムダ式)と、def文
前述の内容をもう少し詳しく説明します。
通常の関数は、def文を使って下記のように定義します。
def文を使った関数の定義
def 関数名( 引数 ) :
return 返り値
一方、lambda(ラムダ式)は、関数を下記のように記述します。
lambda(ラムダ式)の書き方
lambda 引数 : 返り値
lambda(ラムダ式)について、
関数名を指定せずに、関数を記述できるということが理解できましたでしょうか。
次項では、サンプルコードを交えながら、より詳細に解説します。
lambda(ラムダ式)の基本的な使い方
ここから、lambda(ラムダ式)の基本的な使い方について紹介します。
同じ処理を、def文での関数定義と、lambda(ラムダ式)で記述し、比較しています。
はじめに、def文で関数を定義した例です。
### def文で関数を定義するサンプルコード
def squared(x):
calc = x*x
return calc
eq1 = squared(2)
print(eq1)
# 4
次に、lambda(ラムダ式)で記述した例です。
### lambda(ラムダ式)で関数を定義するサンプルコード
eq2 = lambda x : x*x
print(eq2(2))
# 4
同じ処理ですが、lambda(ラムダ式)を用いた記述の方が、
より簡潔な表記になっていることが分かると思います。
また、defで関数を定義した場合は、
関数の処理を確認するために、関数が定義されている箇所を探さないといけませんが、
lambda(ラムダ式)の場合、関数が同一行にあるため、関数を探す手間が不要になります。
lambda(ラムダ式)の引数。2つ以上の引数やデフォルト引数
2つ以上の引数を与えたり、デフォルト引数を指定することも可能です。
### 2つの引数、デフォルト引数を適用したサンプルコード1
eq3 = lambda x, y=1 : x*x + y*y
print(eq3(2, 3))
# 13
### 2つの引数、デフォルト引数を適用したサンプルコード2
eq3 = lambda x, y=1 : x*x + y*y
print(eq3(2))
# 5
スポンサーリンク
lambda(ラムダ式)では、 "if文" も使用可能
lambda(ラムダ式)では、 "if文" も使用可能です。書き方は、下記になります。
lambda(ラムダ式)でのif文の使い方
lambda 引数 : 条件式がTrueの場合の返り値 if 条件式 else 条件式がFalseの場合の返り値
以下、サンプルコードです。
### lambdaに、if文を使用したサンプルコード
is_zero = lambda value : "zero" if value == 0 else value
print(is_zero(0))
# zero
print(is_zero(5))
# 5
スポンサーリンク
lambda(ラムダ式)の使いどころ、メリット
ここまで、lambda(ラムダ式)の基本的な使い方について、紹介してきました。
使い方は理解できても、lambda(ラムダ式)の使いどころのイメージが湧かない方も多いのではないでしょうか。
lambda(ラムダ式)は、下記のような場合に使うと便利です。
- 1行で記述できる数式を使用したい場合
- 作成した関数を頻繁に使用しない場合
ざっくりいうと、
関数のような処理が必要な場合に、
わざわざ "def文" で関数を定義しなくてもよい点がメリットになります。
def文で関数を定義した場合、
関数の機能を調べるためには、def文を探しに行く必要があります。
lambda(ラムダ式)の場合は、関数の定義が同一行にあるため、関数の機能を調べる手間が省けることになります。
これは、コード全体の見やすさにも繋がるメリットです。
文字だけだと、なかなかイメージがつかないと思うので、
lambda(ラムダ式)と相性の良い、map関数、sorted関数のサンプルコードを紹介します。
map関数との組合せ
map関数は、リストの各要素に対して、同一の処理を適用できる関数です。
下記の例では、lambda(ラムダ式)を用いて、リストの各要素に "2" をかけています。
### map関数にlambdaを使用したサンプルコード
num_list = [1, 2, 3, 4, 5]
map_double = map(lambda x: x*2, num_list)
print(map_double)
# <map object at 0x0000013E9A843D68>
print(list(map_double))
# [2, 4, 6, 8, 10]
なお、map関数については、下記の記事で詳しく紹介しているので参考にしてみてください。
sorted関数との組合せ
sorted関数は、リストの各要素をソートできる関数です。
下記の例では、lambda(ラムダ式)を用いて、リスト内のリストのインデックス1の要素を基準にソートしています。
### sorted関数にlambdaを使用したサンプルコード
num_list = [[1, 10, 4], [2, 5, 8], [3, 2, 12]]
new_num_list = sorted(num_list, key=lambda x: x[1])
print(new_num_list)
# [[3, 2, 12], [2, 5, 8], [1, 10, 4]]
なお、sorted関数については、下記の記事で詳しく紹介しているので参考にしてみてください。
スポンサーリンク
まとめ
pythonのlambda(ラムダ式)の基本的な使い方について、例題を交えて紹介しました。
lambda(ラムダ式)を扱えるようになると、関数を気軽に扱えるようになるので、基本的な使い方は理解しておきましょう。
スポンサーリンク