2008年12月13日土曜日

PythonのLambda

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

import compiler import parse
from metrica.ast2et import convert, dump

ast = parse("""lambda : 0""")
t = convert(ast)
dump(t)

の出力は

PythonProgram
Module
+ doc : None
+ lineno : None
Stmt
+ lineno : None
Discard
+ lineno : 1
Lambda
+ kwargs : None
+ argnames : ()
+ flags : 0
+ lineno : 1
+ defaults : ()
+ varargs : None
Const
+ lineno : 1
+ value : 0

となる。

よく見ると、defaultsとかkwargsとかがある。ひょっとしてlambdaにdefaultが持たせられる??!

In [2]: f = lambda x=1: x

In [3]: f
Out[3]: <function <lambda> at 0x7fcfaf42c668>

In [4]: f()
Out[4]: 1

In [5]: f()
Out[5]: 1

In [6]: f(2)
Out[6]: 2

In [7]: f()
Out[7]: 1

In [10]: g = lambda x=0, y=1, z=2: (x,y,z)

In [11]: g()
Out[11]: (0, 1, 2)

In [12]: g(y=5)
Out[12]: (0, 5, 2)

うげー。ものすごく変な感じがする。まあ、pythonのlambdaはlispのlambdaじゃないからなぁ。

0 件のコメント: