为什么abs()函数适用于Python中的位置坐标?

时间:2018-01-23 05:49:20

标签: python

我正在查看关于海龟图形的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解释器上尝试了它,它返回错误。请帮忙!

2 个答案:

答案 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