Developer

【Python連載】ラムダ式の利用
2021.08.31
Lv1

【Python連載】ラムダ式の利用

Pythonは、オブジェクト指向と呼ばれるプログラミング言語の一つです。
今回は、関数について、ラムダ式と呼ばれるものを紹介します。


ラムダ式とは

Pythonでは関数を使用する際にはdef~から始まる形式で関数を定義しますが、
『ラムダ式』と呼ばれる形式で書かれる『無名関数』というものがあります。

詳しい説明の前に、まずは下記のプログラムを見てみましょう。

def tax_included_price(price,tax):
    return price * (tax + 100) /100

print(tax_included_price(100, 10)) #price(価格)が100円、tax(消費税)が10%の値段を表示
C:\Python> python 12-2-1.py
110.0

普通にdef文を使用して、消費税込み価格を求めるような関数です。
priceに商品価格を、taxに消費税を入れるようなイメージですね。
100円の商品が消費税が10%だと、税込み価格は110円となります。

では、上記をラムダ式を使用して書いてみます。

tax_included_price = lambda price,tax : price * (tax + 100) /100

print(tax_included_price(100, 10))
C:\Python> python 12-2-2.py
110.0

1行目の部分でlambda~と記述している部分があると思います。
これがラムダ式の記述になります。

def文で関数を定義した際と同じ実行結果を得ていますが、
ラムダ式を使うと、このような簡単な処理は1行にまとめてしまうことが出来ます。

今回は、このラムダ式の書式と基本的な使い方を覚えましょう。

ラムダ式の書式

書式は次の通りになります。

lambda 引数1,引数2,... : 実行する処理

先ほどの例で当てはめると、次の通りとなります。

ラムダ式の基本的な使い方

ラムダ式は、慣れないうちは構造が感覚的にわかりにくいです。
例を見て、構造を理解できるようになっていきましょう。

lambda_sample1 = lambda x,y : x + y #引数はx,y 実行する処理は、x + y
print(lambda_sample1(1, 2))
C:\Python> python 12-2-4.py
3

実行できる処理は、加減乗除といった計算に限った話ではありません。
メソッドも使うことが可能です。
print()をラムダ式の処理文に含めてしまいます。

lambda_sample1 = lambda x,y : print(x + y) #引数はx,y 実行する処理は、print(x + y)
lambda_sample1(1, 2)
C:\Python> python 12-2-5.py
3

引数は、2つだけでなく3つ以上を使用することができます。
引数には初期値を与えてあげることも可能です。

lambda_sample1 = lambda x,y,z=3 : print(x + y + z) #引数はx,y,z(zの初期値3) 実行する処理は、print(x + y + z)
lambda_sample1(1, 2) #zは指定せずに初期値で計算
C:\Python> python 12-2-6.py
6

ラムダ式は1行で完結させる必要がありますが、プログラム可読性のため、やむを得ず複数行に跨いだ記述にされている場合もあります。
複数行に跨ぐ場合には、次のように改行を\(バックスラッシュ)でエスケープします。

lambda_sample1 = lambda x,y,z=3 : print(x + \
                                        y + z) #\で改行をエスケープし、続きを次行に記載

複数行に跨る形となっていますが、これは1行という扱いになります。
ラムダ式は、本来であれば1行で済むような単一の処理文を実行するものですので、注意しましょう。

以上が、ラムダ式の基本的な使い方でした。
次回の記事では、ラムダ式をもう少し詳しく見ていきたいと思います。


まとめ

Pythonでは『ラムダ式』と呼ばれる形式で書かれる『無名関数』というものを使用できます
ラムダ式では、簡単な処理を基本的に1行で記載します。


確認問題

次のプログラムを実行すると、エラーが発生します。

lambda_sample = lambda x=1,y=2,z=3 : sum = x + y + z , print(sum)
lambda_sample()

エラーの原因について、次の選択肢のうちから正しい記述を選択してください。
(1)ラムダ式では、引数は2つまでしか指定出来ない
(2)実行する処理は、加減乗除等の計算しか行うことは出来ない
(3)実行する処理が、単一の処理となっていない
(4)ラムダ式では、引数に初期値を設定することはできない

答えは次回の記事の最後に!


前回の確認問題の解答例

前回は、次のような問題でした。

次のプログラムを実行した時の出力について、正しいものを選択してください。

def greet(func):
    str = func()
    print(str)

def morning():
    return "おはよう"

def evening():
    return "こんばんは"

message = greet
message(morning)

(1)11行目で変数に関数を代入しているため、エラーが発生する
(2)おはよう と表示される
(3)こんばんは と表示される
(4)1行目で関数の引数として関数を指定しているため、エラーが発生する

関数はオブジェクトであるため、関数を変数に代入したり、関数の引数として関数を使用することが可能です。
12行目ではmessage(つまり、関数greet)の引数として関数morningを指定しているため、関数morningが実行されます。そうすると2行目の変数strには”おはよう”が格納されるため、3行目のprint()により”おはよう”が表示されます。

よって、正解は(2)となります。

連載目次

独学で学ぶ Pythonプログラミング 連載目次