我在Python中发现了一些非常奇怪的全局变量处理方式。我希望有人能够解释和证明这些惊喜!
A) 这段代码按预期输出10:
def func():
print(a)
a = 10
func()
B) 这段代码会抛出一个关于引用过早的异常:
def func():
print(a)
a += 1
a = 10
func()
但是这段代码按预期输出 [10]:
def func():
print(a)
a.append(1)
a = [10]
func()
我可以理解的是,a
的类型会影响其范围,并且后面甚至还没有到达的语句将改变如何看待 a
。 我知道我可以在函数开头使用 global a
,但这太啰嗦了。
有人能告诉我 Python 处理其奇怪作用域所使用的规则吗?
a
改变父作用域和局部作用域中变量的含义非常令人困惑,也不太一致。 它要么是局部变量,要么不是。 从来没有两者都是。 - phant0m