在函数中使用变量(Python)

时间:2017-10-30 11:13:42

标签: python global-variables

给出以下代码:

U = [1,2,3]

def test():
    # global U
    u = U * 2
    print(u)
    # U = u

test()
print(U)

在此表格中,print(u)显示[1,2,3,1,2,3]。这意味着在函数中成功读取了“U”。

但如果我取消注释U = u行,那么我收到以下错误消息:

 u = U * 2 UnboundLocalError: local variable 'U' referenced before assignment

我只能通过取消注释'全球U'线来修复。我不明白这一点。以前u = U * 2工作得很好。如果我取消注释下面的一行,为什么在u = U * 2时会出现错误?

编辑:我不认为这是重复的。我的问题是为什么我在未修改的行中看到错误。在我的真实代码中,'u = U * 2'和'U = u'之间大约有100行,我花了几个小时才意识到错误实际上是由'U = u'行引起的。

1 个答案:

答案 0 :(得分:1)

U = ...创建一个本地变量U。在它出现的函数中的哪个位置并不重要,在开始或结束时,Python在解析函数体时解析所有这些事情。在这种情况下,全局变量U并没有关系,它正被函数体中出现的局部变量U所遮蔽。因此问题归结为您在定义U * 2之前尝试U。除了U之外,您可以调用该变量以获得相同的效果。

澄清:

u = U * 2
U = u

这并不意味着阅读全局U,然后创建本地UU = ...任何地方出现函数体,Python保留名称U作为局部变量名。相同的名称不能模糊地引用全局变量,也不能引用本地变量的下一行。

当您还添加global U时,您要为Python澄清本地函数范围中的名称U始终引用全局变量U

如果省略U = ...,那么在函数内部的任何地方都不会创建该名称的局部变量,并且Python在获取其时会从周围的范围中查找U的值值。