为什么python认为这是一个局部变量?

Pau*_*aul 5 python

我有一个名为Y_VAL的全局变量,它被初始化为值2.

然后我有一个函数,称为f()(为了简洁),它使用Y_VAL.

def f():
    y = Y_VAL
    Y_VAL += 2
Run Code Online (Sandbox Code Playgroud)

但是,在尝试运行我的代码时,python会给出错误消息:

UnboundLocalError: local variable 'Y_VAL' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

如果我删除最后一行Y_VAL += 2它工作正常.

为什么python认为Y_VAL是局部变量?

Mar*_*off 14

你错过global Y_VAL了函数内部的一行.

Y_VAL在赋值的右侧发生时,没有问题,因为首先搜索局部范围,然后搜索全局范围.但是,在左侧,您只能在显式声明时指定为全局方式global Y_VAL.

来自文档:

没有全局变量就不可能分配给全局变量,尽管自由变量可以引用全局变量而不被声明为全局变量.

  • 差异与dicts完全没有关系.您只是比较两个完全不同的操作:"分配给名称"和"分配给绑定到名称的对象的项目".`foo [i] = bar`在本地和全局命名空间(按此顺序)执行`foo`的名称查找,然后将索引`i`的项设置为`bar`(通过调用`foo .__ setitem __() `).`foo = bar`根本不执行任何查找,只是在本地命名空间中设置名称`foo`(除非`foo`被声明为global或nonlocal). (4认同)