Last active
August 29, 2015 13:57
-
-
Save yuitest/9782986 to your computer and use it in GitHub Desktop.
リスト内包の中でラムダ式
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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 |
"ややこしいことしない方がいい" っていうのが主旨だけど、
「ややこしいことをしたいなら、こう書ける」を自分なりに持っておきたいと思って書いた。
同じことが書いてあった:
無名関数のリストのうち一つを呼び出す無名関数のリストの混乱しやすい挙動
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
http://www.slideshare.net/shuyo/numpy-9704562/41
コレを見て書いた。