为什么Python中已声明的全局变量在函数内会被识别为局部变量?
问题原因
global关键字使用位置错误global关键字仅能在函数内部使用,作用是声明当前函数内对指定变量的赋值操作会修改全局作用域的同名变量,而非创建新的局部变量。你将global movex、global movey写在全局作用域属于无效写法,不会产生任何声明效果。- 函数内变量被识别为局部变量
由于你在wasd函数内存在对movex、movey的赋值操作,Python解释器会默认将这两个变量判定为wasd函数的局部变量,不会优先读取全局的同名变量。当你触发按键事件时,比如按下w仅会给局部变量movey赋值,局部变量movex从未完成赋值,执行到p.moverect(movex,movey)时就会触发“局部变量定义前被引用”的报错。
修复方案
删除全局作用域的两行global声明,在wasd函数开头添加global声明即可:
def wasd(event): global movex, movey key = event.char # 后续原有逻辑保持不变
内容的提问来源于stack exchange,提问作者user14354511
相关产品推荐
相关产品推荐

