Python条件使变量变为无符号并引发` UnboundLocalError'`
所以当我开始面对这个问题时,我正在写一些条件句。有人能给我解释一下为什么这个代码不能执行吗?(我简化了语义,使其更易于复制) 然后消息是Python条件使变量变为无符号并引发` UnboundLocalError'`,python,Python,所以当我开始面对这个问题时,我正在写一些条件句。有人能给我解释一下为什么这个代码不能执行吗?(我简化了语义,使其更易于复制) 然后消息是UnboundLocalError:赋值前引用了局部变量“b” 我不确定这是否是由于作用域,但此代码正常工作: def run(): print(a) print(b) 我是否认为我错过了Python的工作原理?如果是这样的话,很抱歉我提出了一个愚蠢的问题,但我已经使用Python 4年多了,以前从未见过这种情况 在WSL中的Python 2.7.15
UnboundLocalError:赋值前引用了局部变量“b”
我不确定这是否是由于作用域,但此代码正常工作:
def run():
print(a)
print(b)
我是否认为我错过了Python的工作原理?如果是这样的话,很抱歉我提出了一个愚蠢的问题,但我已经使用Python 4年多了,以前从未见过这种情况
在WSL中的
Python 2.7.15rc1
和Windows中的Python 3.6.4
中测试。如果希望函数中的a
和b
引用函数外部定义的变量,可以执行以下操作:
a = 1
b = 2
def run():
global a
global b
if a < b:
a = b
run()
a=1
b=2
def run():
全球a
全球b
如果a
您可能会错过变量范围的知识
# Here is the global scope of module
def func():
# Here is the local scope of function
因此,在您的代码中,要在局部作用域中使用在全局作用域中声明的变量,您需要在局部作用域下调用它们之前添加global
a = 1
b = 2
def run():
global a
if a < b:
a = b
run()
不是我对你刚才删除的答案投了反对票,我只是想说清楚。
# Here is the global scope of module
def func():
# Here is the local scope of function
a = 1
b = 2
def run():
global a
if a < b:
a = b
run()
a = 1
b = 2
def run():
if globals()['a'] < b:
a = b # local scope a = 2
run()
# global scope a = 1