Pages

Friday, May 12, 2006

lambda 的改進

剛試著用 lambda 結果爛掉 找了一下發現這篇文章

Stupid lambda tricks [Link]

python 的 lambda 有不少限制 如這篇文章說的

The official python documentation says, that you can only use expressions in lambda, but not statements.

所以他就搞了一堆很有趣的寫法來突破這個限制 不過再怎麼搞還是有先天限制 不像 lisp 裡的那樣方便

perl 裡有一個類似的東西叫 anonymous function 但本質上還是跟 lambda 有點不太一樣 比較像是 anonymous code block

如果只是要在 python 單純使用 anonymous code block 的話 我倒是想到一種作法

>>> t = lambda: eval(compile(""" ... i = 5 ... while i > 0: ...   print i ...   i -= 1 ... print "done" ... """, 'log', 'exec')) >>> t <function <lambda> at 0xb7debd14> >>> t() 5 4 3 2 1 done >>>

要傳參數進去也可以

>>> t = lambda x: eval(compile(""" ... while x > 0: ...   print x ...   x -= 1 ... """, 'log', 'exec')) >>> t <function <lambda> at 0xb7debdf4> >>> t(3) 3 2 1 >>>

缺點是不能傳回結果


This article was originally posted on this site.

No comments:

Post a Comment