Python函数内重新赋值变量触发UnboundLocalError的解决方法
解决UnboundLocalError:在函数内修改全局变量的方法
你遇到的UnboundLocalError是Python作用域规则导致的:当你在函数foo里给delay赋值(delay=0)时,Python会自动把delay标记为局部变量,但你在赋值前先判断了delay>100,这时候局部的delay还未定义,所以抛出了错误。
下面给你几种可行的解决方法,让你能在函数内完成变量重赋值:
方法1:用global关键字声明全局变量
这是最直接的方式,明确告诉Python函数内的delay引用的是全局作用域中的变量:
delay = 0 def foo(): global delay # 声明delay为全局变量 if delay > 100: delay = 0 print('100th time') while 1: delay = delay + 1 print(delay) foo()
方法2:用可变容器包装变量
如果你不想用global关键字,可以把变量放在列表、字典这类可变容器里,因为函数内修改容器的元素不会触发局部变量的绑定:
delay = [0] # 用列表包装全局变量 def foo(): if delay[0] > 100: delay[0] = 0 print('100th time') while 1: delay[0] += 1 print(delay[0]) foo()
额外建议:封装为类(适合更复杂的场景)
如果你的逻辑后续会扩展,把状态(比如delay)封装成类的属性会更优雅,避免全局变量的副作用:
class Counter: def __init__(self): self.delay = 0 def check_and_reset(self): if self.delay > 100: self.delay = 0 print('100th time') counter = Counter() while 1: counter.delay += 1 print(counter.delay) counter.check_and_reset()
这几种方法都能解决你的问题,根据你的场景选择最适合的即可。
内容的提问来源于stack exchange,提问作者user137273
相关产品推荐
相关产品推荐

