Python子例程修改全局score变量异常 无类场景修复咨询
问题根因
这是Python作用域规则导致的典型报错:函数内部如果存在对变量名的直接赋值操作,Python会默认将该变量判定为函数局部变量,不会向外层全局作用域查找同名变量。原代码执行score = score + 1时,解释器会尝试读取尚未赋值的局部变量score,直接抛出UnboundLocalError。
将score = 0移入函数内部的思路不成立,因为每次触发函数都会重新执行赋值,计数会被持续重置为0,无法实现累加。
修复方法
方案1:通过global关键字声明引用全局变量(改造成本最低)
在函数内用global关键字明确指定score引用全局作用域的变量,即可正常修改全局计数,完全适配现有代码结构:
score = 0 def on_button_pressed_a(): global score score = score + 1 print(score) input.on_button_pressed(Button.A, on_button_pressed_a)
方案2:借助可变对象存储计数(无需使用global)
如果不想用全局变量声明,可以把计数值存在列表、字典这类可变容器中。修改可变对象内部元素时,不需要对变量名本身重新赋值,不会触发局部变量判定:
# 用单元素列表存储计数,列表为可变类型 score = [0] def on_button_pressed_a(): score[0] += 1 print(score[0]) input.on_button_pressed(Button.A, on_button_pressed_a)
两种方案均不需要借助类实现,满足要求。
内容的提问来源于stack exchange,提问作者Leo Darling
相关产品推荐
相关产品推荐

