我写了一个函数来计算两点之间的标题,只有当车辆报告它正在移动并且车辆已经移动了20cm之间的点时。函数全局名称中的Python静态变量未定义
该函数使用静态变量 - 或者至少它会起作用 - 跟踪以前的位置和标题值。
下面是代码:
def withCan(pos):
eastdist = pos[0]-previous_pos[0]
northdist = pos[1]-previous_pos[1]
canflag = pos[2]
if (canflag == 1 or canflag==2):
if (previous_canflag == 1 and canflag == 2):
previous_heading += 180.0
previous_canflag = canflag
elif (previous_canflag == 2 and canflag == 1):
previous_heading += 180.0
previous_canflag = canflag
else:
previous_canflag = canflag
if ((canflag == 1 or canflag == 2) and math.sqrt(northdist*northdist+eastdist*eastdist) > canstep):
previous_heading = math.degrees(math.atan2(eastdist, northdist))
previous_pos[0] = pos[0]
previous_pos[1] = pos[1]
return previous_heading
withCan.previous_pos = [0.0,0.0]
withCan.previous_heading = 0.0
withCan.previous_canflag = 0
withCan.canstep = 0.2
positions = backandforth([100,100]) #populates an array of form [x,y,canflag]
for p in positions:
print withCan(p)
我得到的是说eastdist = pos[0]-previous_pos[0] NameError: global name 'previous_pos' is not defined
错误。请有人解释这个错误的原因?
错误信息非常清晰 - 全局名称'previous_pos'未定义。 – xyres
哇,我不是一个Python专家,但我从来没有见过任何人声明这样的变量'withCan.previous_pos = [0.0,0.0]' – HaseebR7
@ HaseebR7:这是合法的Python。这些东西被称为功能属性。 –