a = [1, 2, 3] a = [a[i]+1 for i in range(3)] print(a) # [2, 3, 4]
リスト内包表記ってこう書くじゃん?
a = [1, 2, 3] a = [a[i]+1 for i in range(3)] def b(): print(a) b() # [2, 3, 4]
これでも問題ないじゃん?
a = [1, 2, 3] def b(): a = [a[i]+1 for i in range(3)] print(a) b()
これだとエラー
なんで??
Permalink | 記事への反応(4) | 11:58
ツイートシェア
スコープのせいだよ まずグローバルスコープにaが定義されてるよね 次に、関数bのスコープでもaを定義してしまっている これによってグローバルのaが遮蔽されてしまった
グローバル変数と同じ変数名に代入しようとすると 「代入するってことはローカル変数だな」 と解釈が変わる それで右辺のaがローカル変数扱いになる 代入しつつグローバル変数扱いす...
ありがとう!pythonにそんな書き方あったんだ...
乞食は死ね
うんち