python - Python UnboundLocalError:赋值前引用的局部变量
问题描述
我很困惑。player1_head
与我在下面的代码中打印的其他变量相比,有什么不同?据我所知,它的行为应该与其他行为相同——它是在全局范围内声明的,不是吗?我不认为这是一个错字。
UnboundLocalError:分配前引用的局部变量“player1_head”
from turtle import *
from random import randint
from utils import square, vector
player1_xy = vector(-100, 0)
player1_aim = vector(4, 0)
player1_body = []
player1_head = "It looks like I'm assigning here."
def draw():
"Advance player and draw game."
print("xy: ", player1_xy)
print("head: ", player1_head)
print("body: ", player1_body)
player1_xy.move(player1_aim)
player1_head = player1_xy.copy()
player1_body.append(player1_head)
square(player1_xy.x, player1_xy.y, 3, 'red')
update()
ontimer(draw, 200)
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
draw()
done()
解决方案
因为您未能将其声明player1_head
为global,所以在该draw()
函数中,您似乎在打印出局部变量player1_head
之前它有一个值:
print("head: ", player1_head)
# ...
player1_head = player1_xy.copy()
而是这样做:
def draw():
""" Advance player and draw game. """
global player1_head
print("xy: ", player1_xy)
print("head: ", player1_head)
print("body: ", player1_body)
player1_xy.move(player1_aim)
player1_head = player1_xy.copy()
player1_body.append(player1_head)
square(player1_xy.x, player1_xy.y, 3, 'red')
update()
ontimer(draw, 200)
推荐阅读
- android - Click on button == button appears in random location
- django - 如何对 django 中的计算变量求和?
- java - 如何在 Kotlin 中使用现有的比较器
- sql-server - 从链接表查询插入本地表很慢
- python - 遍历 2 个变量以创建标志
- angular - Firestore Service Worker 和推送通知
- javascript - 有没有办法传递一个变量来评估或从评估中加载一个 json 文件?
- r - R中条形图的聚合分组
- bazel - Bazel query that doesn't follow all select branches
- livecode - mergPopActivity 未能加载活动