カテゴリー
コーディング

Python defとlambda文法と違いの比較

同様の機能を持つ2つのキーワードについて見てみましょう。無駄に2つを作っておかなかったでしょう?

def 説明

一例を挙げてみましょう。

def add(x, y):
    return x + y
print(add(3,5))

結果は次のとおりです。

8

関数はdefキーワードで作成します。

addは関数の名前で、渡される引数をx、yと定義しました。

2つの値を加えた結果をreturnしてくれる機能をしています。

このように作成されたadd関数に3と5を引数として渡したところ、8という結果が出ることがわかります。

lambda 説明

上記の関数と同じ機能を作成しましょう。

add = lambda x,y: x+y
print(add(2,3))

結果は次のとおりです。

5

lambdaというキーワードを使ってx、yを引数として受け取り、2つの値を加えた結果をreturnする機能をします。

Lambdaはデフォルトで名前のない関数を作成します。

そして、一行でもう少し簡潔に書くことができます。

また、returnキーワードを使用しません。

変数に代入して関数と同じように使用することもできます。

活用方法の比較

わかりやすくするために、別の使用例を見てみましょう。

temp = [1,2,3,4,5]
result = list(filter(lambda x:x>2, temp))
print(result)

結果は次のとおりです。

[3,4,5]

filter メソッドを使用して要素を 1 ~ 5 まで持つ配列から 2 より大きい値だけを選抜する例です。

lambda は値を渡され、2 より大きいかどうかを判断し、真 (True)、偽 (False) Boolean 値を return する機能をします。

filter メソッド 最初の引数にラムダ、2 番目の引数に配列を代入します。

配列を巡回し、2より大きい場合は値を保持し、そうでない場合は除外して結果を作成します。

filterで得られた結果をlistメソッドとして配列型を作成し、result変数に保存しました。

関数でまったく同じ機能を作りましょう。

temp = [1,2,3,4,5]
def comp(x):
    return x > 2
result = list(filter(comp, temp))
print(result)

結果は次のとおりです。

[3,4,5]

どのように実装しても構いませんが、この例のような場合、ラムダはもう少し簡潔でしょうか?

実際に type を撮ってみると、def, lambda で実装したものすべて function と同じように出てきます。

したがって、ラムダが関数の中に含まれるという概念として考えることができます。

結論は、defキーワードは、再利用が必要な関数を作成するときに使用し、単純なワンタイム関数を作成したいときは、lambdaを使用する方が良いようです。

この投稿には2の返信があります。

コメントを残す

メールアドレスが公開されることはありません。

ja日本語