Python構文 lambda(ラムダ)

Python

lambdaとは?

今までPHPはかなりやってきたが、これはPythonのどんな機能?ラムブダ??
よくわらかなかったので、調べた時の備忘録です。

lambda
読み方:らむだ
1.ギリシャ文字の第11字。
2.粒子の記号。

なんのことやら。日本語ヨミは「ラムダ」のようだ

公式サイト情報(英文)

4. More Control Flow Tools — Python 3.11.2 documentation
Besides the while statement just introduced, Python uses the usual flow control statements known from other languages, with some twists. if Statements: Perhaps the most well-known statement type is...
https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions
構文
lambda [parameters(パラメータ)]: expression(処理)

--sample--
lambda a, b: a+b

ネット上には「それ通常関数で良くない?」というサンプルも多いですね。
例えば以下のように、lambdaを一度変数に入れて、使用する方法。エラーではないですがPycharmでワーニング出ますね。
PEP8 コーディング規約違反

lambda_test = lambda a, b: a + b;
print(lambda_test(a, b))

PEP 8: E731 do not assign a lambda expression, use a def
ラムダを代入しないで、defを使ってください

たしかに、稼働性を悪くしているだけかと。

どういう場面で使用すべきか

調べたところ、以下3つがlambdaを使用するのに適しているのかと感じました。
「ワンセット」と覚えておいても良いのかも。

① filter(function, iterable)

関数の条件にあう要素のみ抽出する

https://docs.python.org/3/library/functions.html#filter

function:関数

iterable:反復可能なオブジェクト

ex)リストから2を超える値を抽出する

通常の関数を使用した場合

# 反復可能なオブジェクトを用意(今回はリストを使用)
lists = [5, 1, 4, 3, 2]
print("元リスト", lists)
print('型', type(lists))


# 通常の関数
def is_judgment(num):
    print("関数処理", num)
    return num > 2


#リストから値を一つずつ取りだし、関数を実行
result_object = filter(is_judgment, lists)
print("filter実施後", result_object)
print('型', type(result_object))

# 結果をリスト型に戻す
select_lists = list(result_object)
print("list型変換後", select_lists)
print('型', type(select_lists))

-- 結果 --
元リスト [5, 1, 4, 3, 2]
型 
filter実施後 
関数処理 5
関数処理 1
関数処理 4
関数処理 3
関数処理 2
list型変換後 [5, 4, 3]
型 

lamdaを使用した場合

# 反復可能なオブジェクトを用意(今回はリストを使用)
lists = [5, 1, 4, 3, 2]
print("元リスト", lists)
print('型', type(lists))

# リストから値を一つずつ取りだし、関数を実行
result_object = filter(lambda num: num > 2, lists)
print("filter実施後", result_object)
print('型', type(result_object))

# 結果をリスト型に戻す
select_lists = list(result_object)
print("list型変換後", select_lists)
print('型', type(select_lists))

-- 結果 --
元リスト [5, 1, 4, 3, 2]
型 
filter実施後 
list型変換後 [5, 4, 3]
型 

② map(function, iterable)

要素の全てに対して関数をじっこう

https://docs.python.org/3/library/functions.html#map

function:関数

iterable:反復可能なオブジェクト

ex)リスト内の金額を消費税計算する

通常の関数を使用した場合

# 反復可能なオブジェクトを用意(今回はリストを使用)
lists = [100, 5000, 1000, 3000, 2000]
print("元リスト", lists)
print('型', type(lists))


# 通常の関数
def is_tax(price):
    print("関数処理", price)
    return int(price * 1.10)


# リストから値を一つずつ取りだし、関数を実行
result_object = map(is_tax, lists)
print("map実施後", result_object)
print('型', type(result_object))

# 結果をリスト型に戻す
select_lists = list(result_object)
print("list型変換後", select_lists)
print('型', type(select_lists))

-- 結果 --
元リスト [100, 5000, 1000, 3000, 2000]
型 
map実施後 
関数処理 100
関数処理 5000
関数処理 1000
関数処理 3000
関数処理 2000
list型変換後 [110, 5500, 1100, 3300, 2200]
型 

lamdaを使用した場合

# 反復可能なオブジェクトを用意(今回はリストを使用)
lists = [100, 5000, 1000, 3000, 2000]
print("元リスト", lists)
print('型', type(lists))

# リストから値を一つずつ取りだし、関数を実行
result_object = map(lambda x: int(x * 1.10), lists)
print("map実施後", result_object)
print('型', type(result_object))

# 結果をリスト型に戻す
select_lists = list(result_object)
print("list型変換後", select_lists)
print('型', type(select_lists))

-- 結果 --
元リスト [100, 5000, 1000, 3000, 2000]
型 
map実施後 
list型変換後 [110, 5500, 1100, 3300, 2200]
型 

③ sorted(iterable, key=None, reverse=False)

ソートした新たなリストを生成する

https://docs.python.org/3/library/functions.html?highlight=sorted#sorted

iterable:反復可能なオブジェクト

key:比較対象のキー(省略可)

reverse:逆順にする場合True(省略可、デフォルトFalse

ex)タプルの特定キーで並び替え

通常の関数を使用した場合

# 反復可能なオブジェクトを用意(今回はリスト「タプル」を使用)
tuples = [('岩手県', 3), ('北海道', 1), ('青森県', 2)]
print("元タプル", tuples)
print('型', type(tuples))


# 通常の関数
def is_sort(tuplue):
    print("関数処理", tuplue)
    return tuplue[1]


# リスト内のタプルを番号(要素1番目)で昇順に並び変える
result_object = sorted(tuples, key=is_sort, reverse=False)
print("sorted実施後", result_object)
print('型', type(result_object))

-- 結果 --
元タプル [('岩手県', 3), ('北海道', 1), ('青森県', 2)]
型 
関数処理 ('岩手県', 3)
関数処理 ('北海道', 1)
関数処理 ('青森県', 2)
sorted実施後 [('北海道', 1), ('青森県', 2), ('岩手県', 3)]
型 

lamdaを使用した場合

# 反復可能なオブジェクトを用意(今回はリスト「タプル」を使用)
tuples = [('岩手県', 3), ('北海道', 1), ('青森県', 2)]
print("元タプル", tuples)
print('型', type(tuples))

# リスト内のタプルを番号(要素1番目)で昇順に並び変える
result_object = sorted(tuples, key=lambda x: x[1], reverse=False)
print("sorted実施後", result_object)
print('型', type(result_object))

-- 結果 --
元タプル [('岩手県', 3), ('北海道', 1), ('青森県', 2)]
型 <class 'list'>
sorted実施後 [('北海道', 1), ('青森県', 2), ('岩手県', 3)]
型 <class 'list'>
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!
プロフィール背景画像 プロフィール画像
名前:田中寛之
今まで約20年間、出版社、マスコミ、化粧品会社、システム会社・病院・クリニックにてシステムエンジニアとして勤務。現在、個人事業主「ONLINE-WORLD」として活動し、42歳からPythonを始めました!