我在 Python 代码中遇到了一个对我来说很奇怪的错误,现在我对全局字典的工作方式感到困惑。
我的示例代码:
myDict={'two':2,'three':3}
def f():
print myDict
f()
Run Code Online (Sandbox Code Playgroud)
提供我期望的输出: {'two': 2, 'three': 3}
但是,如果我用一行更改代码:
myDict={'two':2,'three':3}
def f():
print myDict
myDict={}
f()
Run Code Online (Sandbox Code Playgroud)
然后我得到
Traceback (most recent call last):
File "test.py", line 9, in <module>
f()
File "proba.py", line 7, in f
print myDict
UnboundLocalError: local variable 'myDict' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
我的问题:
myDict在函数中打印全局f,为什么我不能重新分配它?myDict={}尽管稍后执行,该行如何中断打印命令?我正在使用 Python 2.7。感谢您的帮助!
1.如果我可以在函数f中打印全局myDict,为什么不能重新赋值?
要从函数分配给全局变量,您需要使用global指令。否则 Python 将创建一个同名的局部变量。
global myDict
Run Code Online (Sandbox Code Playgroud)
将其添加到函数的顶部。
2. myDict={} 行如何中断打印命令,尽管它是稍后执行的?
在执行之前,Python 会分析整个函数体,以确定哪些变量是局部变量,哪些变量是全局变量。添加赋值会改变 Python 的分析。它myDict从全局变量变为局部变量。
这会影响打印语句。它不打印全局myDict变量,而是打印局部变量。并且在打印时变量还不存在,因此出现错误。