古い Python の変数のスコープ [Python]
今日 Jython 2.1 を使っていてラムダの自由変数ではまった。短く表現すると以下のような感じのコード。
(lambda x: lambda y: x + y)(2)(3)
5を返してほしいんだけどこれは NameError: x となる。つまり内側の lambda から外の x が見えない。こういう仕様だというのに今まで気づかなかった。以下のようにすると回避できる。
(lambda x: lambda y, x=x: x + y)(2)(3)
あたらしめの Python では最初の例が期待通りに動く。少なくとも 2.4 では動いた。しかし CPython が最新 2.5 のところを Jython が開発版でもまだ 2.2 というのはさびしいなあ。
コメント 0