私は他のいくつかの SO ( PythonScopeとglobals は global を必要としません) を読みましたが、私が望むほど明確に説明しているようには見えず、 PyDocsが私の質問への答えを教えてくれるかどうかを精神的にふるいにかけるのに苦労しています:
myList = [1]
def foo():
myList = myList + [2, 3]
def bar():
myList.extend([2, 3])
def baz():
myList += [2, 3]
さて、当然のことながら、
>>> foo()
UnboundLocalError: local variable 'myList' referenced before assignment
と
bar() # works
myList # shows [1, 2, 3]
しかしその後
>>> baz()
UnboundLocalError: local variable 'myList' referenced before assignment
+=
しかし、この場合は暗黙のうちにメソッド演算子を呼び出すようなものだと思いましたが、エラーは、何らかの理由で実際にはとしてextend()
扱わないことを意味します。これは、Python の解析がどのように機能するべきかということと一致していますか?+=
extends()
メソッド演算子と同等の関数を呼び出すと、すべての場合で同等になると思いました。+=
代わりに、実際の代入演算子として扱っているようです。ただし、これは完全に真実ではありません。
myList = range(50000000) # wait a second or two on my laptop before returning
myList += [0] # returns instantly
myList = myList + [1] # wait a second or two before returning
+=
実際に を呼び出すだけであれば、これらすべてが期待されますextend()
。
をローカル変数として扱う必要があり、グローバルを認識するようなものに暗黙的に変換できないことを明確にmyList
する、私が見逃しているいくつかの細かい区別(または非常に明白な点...)はありますか?変数?baz()
+=
extend()