SSブログ

古い 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 というのはさびしいなあ。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。