lambda(無名関数、ラムダ式)が便利【Python】

pythonの無名関数の記事のアイキャッチPython

そもそもWhat is lambda(無名関数、ラムダ式) ??

Wikipediaから引用するとこんなの

無名関数とは、名前付けされずに定義された関数のことである。

Wikipedia-無名関数 https://ja.wikipedia.org/wiki/%E7%84%A1%E5%90%8D%E9%96%A2%E6%95%B0

そのまんまの意味ですね

関数の定義

基本形

Pythonでは関数の定義を普通こうやってやるところを

def func(引数):
    return 返り値

def func(引数1, 引数2, ・・・):
    return 返り値

lambdaを使って次のようにように書くことができます

lambda 引数: 返り値

lambda 引数1, 引数2, ・・・: 返り値

実際に使ってみると無名関数もしっかりと関数やっていますね

def division(a, b):
    return a/b

division_lam = lambda a, b: a/b

print(division(3, 2))
# 1.5
print(division_lam(3, 2))
# 1.5

ifを使う

lambdaを使っていると何かとif文を使いたいことも出てきます
もちろんifを使うことも可能です!

具体的には以下のように三項演算子を利用します

lambda 引数: Trueの時の値 if 条件式 else Falseの値
func = lambda a: '偶数' if a%2==0 else '奇数'
print(func(2))
# 偶数
print(func(3))
# 奇数

引数なし

引数なしでもlambdaは使えます

func = lambda : 'hello'
print(func())
# hello

高階関数で使う

今まではlambdaで宣言はしていましたが結局変数に入れていたので、普通の関数定義とあんまり変わ利ませんね
そこで高階関数で利用する例を紹介します

高階関数はlambdaが活躍する典型的な例ですね

高階関数には引数として関数を与えるわけですが、その関数は比較的簡単な場合が多いです
ここでいちいち関数を定義するのはコードも汚くなってしまうのでlambdaの出番というわけですね

ではmapを例に使ってみましょう

x = [i for i in range(10)]
print(list(map(lambda a: a**2, x)))
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

はい、簡潔ですね
lambda 👍

高階関数についてはこちらをご覧ください

lambda(無名関数、ラムダ式)のメリット・デメリット

わざわざlambda(無名関数、ラムダ式)なるものがあるからにはメリットも存在します

  • 小さい関数をわざわざ定義する必要がない
  • 名前の衝突を考えなくて良い
  • コードが簡潔になる

すぐに思いつくのはこの辺りでしょうか?

デメリットは再帰関数を作るのが面倒なところだと思います
よく考えたら無名関数で再帰ってどうやってやるんですかね?

調べたらありました
難しそう…
再帰関数は普通に作った方が良さそうです

各言語による無名再帰処理の実行例まとめ

コメント