python - Python - 在分配变量之前引用的局部变量应该覆盖范围之外的变量
问题描述
此代码不起作用(UnboundLocalError: local variable 'x' referenced before assignment
):
x = 5
def thing():
x = x + 1
thing()
这个确实(仅更改x
为i
):
x = 5
def thing():
i = x + 1
thing()
我预计对于第一个,它将创建一个名为x
6 的新变量(保持外部变量不变),这就是i
第二个示例中的内容。这里发生了什么?似乎当一个变量第一次在作用域中创建时,它会检查它是否存在于任何外部作用域中,如果已经找到则引发错误,如果已经找到则引发错误。
现在,我的问题是,这样做的目的是什么?
解决方案
Python 不允许您使用相同的符号来引用两个不同的变量。要么x
是global
,在这种情况下,您必须global x
在函数的开头声明(然后两次出现都x
引用函数内部的全局);或者不是,在这种情况下,x
您所指的 inx + 1
尚未定义。
以一种奇怪的方式,您的推理是有道理的,至少在这个小玩具示例中,但应该很容易看出您假设的语义在任何具有许多变量的较大代码块中对于人类来说将是灾难性的难以理解。
推荐阅读
- python - 在带有 if 条件的整个数据帧上的 pandas 中使用 applymap
- sql-server - 存储过程需要以自定义格式返回唯一值,但似乎返回重复项
- android - 当我使用proguard并启用minify和shrinkresources时,Retrofit body request是空白的
- javascript - 在 javascript 中为数组和对象使用 variable.length 时需要注意什么?
- javascript - React Native:从函数渲染文本
- javascript - 计算滚动时窗口的高度
- android - 如何使用底部导航栏将地图视图设置为全屏
- javascript - 带有 ng-if 的模板字符串有错误:$parse:syntax
- .net - 点网框架与点网核心 sdk
- rest - 按主机名过滤在我的 WireShark 中不起作用