我正在查看关于海龟图形的Python文档,它有一个绘制海龟之星的例子。该计划如下:
from turtle import *
color('red', 'yellow')
begin_fill()
while True:
forward(200)
left(170)
if abs(pos()) < 1:
break
end_fill()
done()
我不明白为什么abs(pos())
有效? abs()
函数只接受一个参数,但pos()
函数返回一个位置(x,y)坐标。我知道这个程序有效,只是不明白为什么。我在abs((-0.00,0.00))
的Python解释器上尝试了它,它返回错误。请帮忙!
答案 0 :(得分:2)
pos()
没有返回带有x和y坐标的元组,而是返回turtle.Vec2D
类型的对象,可以使用以下方法验证:
>>> type(pos())
>>> turtle.Vec2D
此外,如果你运行dir(pos())
,你可能会得到:
['__abs__', '__add__', ... '__class__','count', 'index', 'rotate']
因此turtle.Vec2D
对象有自己的__abs__
实现,但通用tuple
没有这样的实现。
答案 1 :(得分:2)
pos()
返回turtle.Vec2D,而不是元组。您可以通过实施abs()
使__abs__()
适用于任何类型。对于乌龟,__abs__()
根据海龟源代码here返回(self[0]**2 + self[1]**2)**0.5
。