文法・環境

【python】lambda(ラムダ式、無名関数)の基本的な使い方、語法、用法

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(ラムダ式)を扱えるようになると、関数を気軽に扱えるようになるので、基本的な使い方は理解しておきましょう。

スポンサーリンク

-文法・環境
-