所以当我开始面对这个问题时,我正在写一些条件句。有人能解释一下为什么这个代码不能执行吗(我简化了语义,使其更易于复制)
a = 1
b = 2
def run():
if a < b:
a = b
run()
它引发了一个UnboundLocalError: local variable 'a' referenced before assignment
。在if块中赋值的变量似乎发生了这种情况,因此我将函数改为:
def run():
if a < b:
b = a
然后消息是UnboundLocalError: local variable 'b' referenced before assignment
我不确定这是否是由于作用域,但此代码正常工作:
def run():
print(a)
print(b)
我认为Python的工作原理有什么遗漏吗?如果是这样的话,很抱歉问这个愚蠢的问题,但是我已经和Python一起工作了4年多了,以前从来没有见过这个问题
在WSL的Python 2.7.15rc1
和Windows的Python 3.6.4
中测试
您可能会错过变量范围的知识
因此,在您的代码中,要在局部作用域中使用全局作用域中声明的变量,您需要在局部作用域下调用它们之前添加
global
如果没有在局部作用域内声明全局变量,将出现异常
UnboundLocalError
,因为在比较后的一行中声明另一个局部a
:if a < b
。语法检查将在执行代码之前验证本地范围中的变量声明。因此,b
不需要在局部范围内是全局的,但是a
需要或者另一种方法是使用
globals()
调用模块杠杆变量。但这种方法不会改变全局范围内变量的值如果希望函数内的
a
和b
引用函数外定义的变量,可以执行以下操作:相关问题 更多 >
编程相关推荐