Python構文 lambda(ラムダ)
lambdaとは?
今までPHPはかなりやってきたが、これはPythonのどんな機能?ラムブダ??
よくわらかなかったので、調べた時の備忘録です。
lambda読み方:らむだ
1.ギリシャ文字の第11字。
2.粒子の記号。
なんのことやら。日本語ヨミは「ラムダ」のようだ
公式サイト情報(英文)

4. More Control Flow Tools — Python 3.11.2 documentation
構文
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実施後
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実施後
③ 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'>



