gpt4 book ai didi

python - 在函数中读取并重新分配全局字典

转载 作者:行者123 更新时间:2023-11-28 20:23:33 25 4
gpt4 key购买 nike

我在我的 Python 代码中遇到了一个对我来说很奇怪的错误,现在我对全局字典的工作方式感到困惑。

我的示例代码:

myDict={'two':2,'three':3}

def f():
print myDict
f()

提供我期望的输出:{'two': 2, 'three': 3}

但是,如果我用一行更改代码:

myDict={'two':2,'three':3}

def f():
print myDict
myDict={}
f()

然后我得到

 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

我的问题:

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

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

最佳答案

1. If I can print the global myDict in function f, why can't I reassign it?

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

global myDict

将其添加到函数的顶部。

2. How can the line myDict={} break the print command, despite that it is executed later?

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

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

关于python - 在函数中读取并重新分配全局字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20153512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com