gpt4 book ai didi

Python 条件使变量变为无符号并引发 `UnboundLocalError`

转载 作者:行者123 更新时间:2023-12-01 08:16:14 26 4
gpt4 key购买 nike

所以当我开始遇到这个问题时,我正在写一些条件。有人可以向我解释为什么这段代码无法执行吗? (我简化了语义以使其更易于重现)

a = 1
b = 2

def run():
if a < b:
a = b

run()

它提出了 UnboundLocalError: local variable 'a' referenced before assignment 。这似乎发生在 if block 内分配的变量,所以我将函数更改为:

def run():
if a < b:
b = a

然后消息是 UnboundLocalError: local variable 'b' referenced before assignment .

我不确定这是否是由于作用域所致,但此代码正常工作:

def run():
print(a)
print(b)

我是否错过了 Python 工作原理的任何想法?如果是这样,抱歉这个愚蠢的问题,但我使用 Python 已有 4 年多了,以前从未见过这个。

测试于 Python 2.7.15rc1 WSL 内和 Python 3.6.4在 Windows 中。

最佳答案

您可能会错过变量范围的知识。

# 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()

如果没有在局部作用域内声明全局变量,则会出现异常 UnboundLocalError会出现,因为您声明了另一个本地 a比较后一行:if a < b 。语法检查将在执行代码之前验证局部范围内的变量声明。因此,b不需要在本地范围内是全局的,但是 a需求。

或者另一种方法是使用 globals()调用模块杠杆变量。但这种方式不会改变全局范围内变量的值。

a = 1
b = 2

def run():
if globals()['a'] < b:
a = b # local scope a = 2

run()
# global scope a = 1

关于Python 条件使变量变为无符号并引发 `UnboundLocalError`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54965105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com