pythonのlambda内で無理やり変数を定義する

lambdaって楽しいよね! 実用する気にはならないけれど! という訳で、lambdaの小ネタを。

lambdaのルールとして、変数定義はできません。あと、文も書けません。if文とかね。 それをくぐり抜けようというのが今回の趣旨。

if文はとりあえず前に書いた三項演算子を使えばおっけー。

で、変数。 Lispのletみたいな事をします。

>>> f = lambda a, b: (lambda x=a*b : x*a)

でおっけー。

def f(a, b):
	x = a * b
	return x * a

と同じ意味ね。 代入は出来ないけれど、まあなんとかなるだろ、きっと。

これを利用して

>>> (lambda x, func=(lambda self, x : (x * self(self, x-1)) if x>1 else x) : func(func, x))(5)
120

みたいな事も可能。階乗ね。

これで無名関数を代入せず再帰できる! ・・・見辛いだけだけどね。