Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python条件使变量变为无符号并引发` UnboundLocalError'`_Python - Fatal编程技术网

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