無名関数(ラムダ関数)
入門Python3 4.7.10
名前の無い関数のことです。
巷ではクロージャと相性が良いと言われるこの無名関数、さっそく前回のクロージャの記事で書いたカウンタの処理を無名関数で置き換えてみます。
def counter (i): func = lambda: nonlocal i ret = i i += 1 return ret return func
簡単ですね、さあ実行してみると・・・
$ py main.py File "main.py", line 5 func = lambda: ^ SyntaxError: invalid syntax
あれ、エラーがでました。
条件反射で実装してみたわけですが、よくよくちゃんと仕様を読んでみると無名関数は複数行の処理はかけないようです。(ググってみたら括弧を使って擬似複数行っぽいことまでは出来るみたいですが)
そしてそもそもreturn文すら必要ありません。
以下、引数無しの無名関数の定義になります。
func = lambda : 100 print(func())
$ py main.py 100
引数有りならこう
func = lambda i: i + 1 print(func(10))
$ py main.py 11
つまり結局のところカウンタのような複雑な処理をする場合、無名関数ではなく関数内関数で実装するのが正解ってことになりますかね。