あまり動的でない C++ から来たので、この Python (2.7) コードの動作を理解するのに苦労しています。
注:これが悪いプログラミングスタイル/悪であることは承知していますが、それでも理解したいと思います。
vals = [1,2,3]
def f():
vals[0] = 5
print 'inside', vals
print 'outside', vals
f()
print 'outside', vals
このコードはエラーなしで実行されf
、(一見) グローバル リストを操作します。これは、関数内で操作される (読み取るだけでなく) グローバル変数は として宣言する必要があるという私の以前の理解に反していますglobal ...
。
一方、 に置き換えるvals[0] = 5
と、 に aを追加しない限りvals += [5,6]
、実行は an で失敗します。これは、最初のケースでも起こると予想していたことです。UnboundLocalError
global vals
f
この振る舞いを説明できますか?
vals
最初のケースで操作できるのはなぜですか? 最初のタイプの操作は失敗しないのに、2 番目のタイプの操作は失敗するのはなぜですか?
更新:vals.extend(...)
なしで機能
するコメントで指摘されましたglobal
。これは私の混乱を助長します -+=
への呼び出しとは異なる扱いを受けるのはなぜextend
ですか?