あまり動的でない 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 で失敗します。これは、最初のケースでも起こると予想していたことです。UnboundLocalErrorglobal valsf
この振る舞いを説明できますか?
vals最初のケースで操作できるのはなぜですか? 最初のタイプの操作は失敗しないのに、2 番目のタイプの操作は失敗するのはなぜですか?
更新:vals.extend(...)なしで機能
するコメントで指摘されましたglobal。これは私の混乱を助長します -+=への呼び出しとは異なる扱いを受けるのはなぜextendですか?