Pythonでは、関数を定義するためにdef
キーワードを使用します。しかし、一部の場合では、関数が一時的にしか使われない、あるいは関数の動作が非常にシンプルで、それを独立させる必要がないとき、無名関数(ラムダ関数)を使うことがあります。
defとlambdaの違い
def
とlambda
の違いは、lambda
式はあくまでも「式」であり、def
はステートメントである。よってPythonの文法上def
による関数定義が使えない箇所でもlambda
によって処理をまとめることが出来ます。
lambdaの基本的な使い方
lambda式の基本的な使い方をサンプルコードを使って紹介します。引数と返り値を設定して呼び出すこれが無名関数の基本的な呼び出し方となります。lambdaの後に引数を設定し、「:」の後に返り値を設定することで無名関数を呼び出すことができます。
x = lambda a, b, c : a + b + c
print(x(13, 40, 45)) # 出力結果: 98
y = lambda a, b : a + b
print(y("おはよう", "ございます。")) # 出力結果: おはようございます。
lambdaとdefのコード比較
リストの中にある数字が偶数である場合と奇数である場合で表示を変えてリストに格納するコードを作成します。defで作成すると、下記のようになります。
list1 = [0,120,2,99,450,44,88,1000,667,22]
list2 = []
def check():
for i in list1:
if i % 2 == 0:
list2.append(str(i) + "は偶数です。")
else:
list2.append(str(i) + "は奇数です。")
print(list2)
check() # 出力結果: ['0は偶数です。', '120は偶数です。', '2は偶数です。', '99は奇数です。', '450は偶数です。', '44は偶数です。', '88は偶数です。', '1000は偶数です。', '667は奇数です。', '22は偶数です。']
defで書くと、for文とif文がインデントで区別されていて分かりやすいです。続いて、lambda式で書いてみると下記のようになります。
list1 = [0,120,2,99,450,44,88,1000,667,22]
list2 = (lambda i:str(i) + "は100以上です。" if i >= 100 else str(i) + "は100未満です。")
list3 = list(map(list2,list1))
print(list3) # 出力結果: ['0は100未満です。', '120は100以上です。', '2は100未満です。', '99は100未満です。', '450は100以上です。', '44は100未満です。', '88は100未満です。', '1000は100以上です。', '667は100以上です。', '22は100未満です。']
map()関数によってリストの配列を取り出し、それに対して、if文でチェックを行っています。そして、チェックを行った結果をリストに格納して表示しています。
以上がPythonのdef
とlambda
の違いについての説明です。それぞれの特性を理解し、適切な場面で使い分けることが大切です。.