在函数中读取和重新分配全局字典

lee*_*dam 2 python dictionary

我在 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)

我的问题:

  1. 如果我可以myDict在函数中打印全局f,为什么我不能重新分配它?
  2. myDict={}尽管稍后执行,该行如何中断打印命令?

我正在使用 Python 2.7。感谢您的帮助!

Joh*_*ica 5

1.如果我可以在函数f中打印全局myDict,为什么不能重新赋值?

要从函数分配给全局变量,您需要使用global指令。否则 Python 将创建一个同名的局部变量。

global myDict
Run Code Online (Sandbox Code Playgroud)

将其添加到函数的顶部。

2. myDict={} 行如何中断打印命令,尽管它是稍后执行的?

在执行之前,Python 会分析整个函数体,以确定哪些变量是局部变量,哪些变量是全局变量。添加赋值会改变 Python 的分析。它myDict从全局变量变为局部变量。

这会影响打印语句。它不打印全局myDict变量,而是打印局部变量。并且在打印时变量还不存在,因此出现错误。