Skip to content

Instantly share code, notes, and snippets.

@yuitest
Last active August 29, 2015 13:57
Show Gist options
  • Save yuitest/9782986 to your computer and use it in GitHub Desktop.
Save yuitest/9782986 to your computer and use it in GitHub Desktop.
リスト内包の中でラムダ式
# coding: utf-8
# 束縛されてる x が共通になってしまう。
L = [lambda y: x * y for x in range(0, 10)]
# 0 * 2 = 0 のつもりで書いてるのに、中身は 2 * 9 == 18 だ。
assert L[0](2) == 18
# こう書けば OK
L = [(lambda z: lambda y: z * y)(x) for x in range(0, 10)]
# 中身がちゃんと 0 * 2 == 0
assert L[0](2) == 0
@yuitest
Copy link
Author

yuitest commented Mar 26, 2014

@yuitest
Copy link
Author

yuitest commented Mar 26, 2014

"ややこしいことしない方がいい" っていうのが主旨だけど、
「ややこしいことをしたいなら、こう書ける」を自分なりに持っておきたいと思って書いた。

@yuitest
Copy link
Author

yuitest commented Mar 26, 2014

同じことが書いてあった:

無名関数のリストのうち一つを呼び出す無名関数のリストの混乱しやすい挙動
http://d.hatena.ne.jp/yatt/20091012/1255353971

混乱しやすいので、たしかpython3では改善されていたはず。多分。適当。

これは Python 3 でも共通の仕様のはず。多分。 (LLEval で実行してたしかめた http://colabv6.dan.co.jp/lleval.html)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment