当我们有 turtle.tracer(0) 时是否需要设置 `turtle.speed(0)`

Is setting `turtle.speed(0)` necessary when we have turtle.tracer(0)

有区别吗:

import turtle
turtle.tracer(0)
turtle.speed(0)
while True:
    turtle.goto(turtle.xcor()+1)
    turtle.update()

并且:

import turtle
turtle.tracer(0)
while True:
    turtle.goto(turtle.xcor()+1)
    turtle.update()

我听说设置 turtle.speed(0) 可以加快速度,但如果是这样,我看不出有什么区别。

根据:https://www.eg.bucknell.edu/~hyde/Python3/TurtleDirections.html

tracer()方法:

  • 可用于加速复杂图形的绘制。

  • 关闭乌龟会使乌龟消失并使绘制速度更快。

官方文档https://docs.python.org/2/library/turtle.html#turtle.speed说:

  • “fastest”: 0 # 用于设置乌龟速度

结论:我认为可以这样说:

如果你正在做非常复杂的图形,并且你想要速度,请同时使用这两种图形,在复杂的图形中你应该会看到一些差异,因为它们都可以加速海龟

如果你做的是简单的图形,使用两者的速度不会比你做复杂的图形那么明显,所以没有必要同时使用两者而只使用,例如: turtle.speed(0) 根据官方文档:https://docs.python.org/2/library/turtle.html#turtle.tracer tracer() 在较新版本的 turtle 模块中已被弃用。

所以我建议先改变速度,然后如果你需要更快的性能改变追踪器。或者您可以禁用跟踪器,因为您不想显示乌龟动画,这真的取决于您,但我希望我能指导您。

我编写自己的代码和重写其他人的代码的经验是,关闭跟踪后,tracer(0)Turtle.speed() 方法没有区别。 turtle.py 源代码似乎与此相呼应:

if self._speed and screen._tracing == 1:

只有在追踪时,tracer(1),我们才会考虑乌龟的速度。

此外,根据我的经验,关闭追踪比 turtle.speed('fastest') 具有 更多 效果,因为 speed() 方法仅影响单个海龟,而 tracer(0) 影响所有海龟和潜在的其他动作。

我自己关于 tracer() 的经验法则:

  • 使用update()向用户显示当前图形状态,避免 为此目的打开和关闭 tracer()

  • 不要假设您的 update() 电话是唯一的电话。一些海龟操作 打电话给 update() 所以不要感到惊讶。

  • 在您的代码基本正常工作之前不要关闭跟踪——即不要 在黑暗中调试。

  • 如果您不使用事件(例如鼠标、键盘、计时器),则在 final mainloop() 调用或等效调用。否则像隐藏这样的后期动作 乌龟似乎不会发生。

  • 不要使用除 0 和 1(或 FalseTrue)以外的任何参数。 强制更新每 N 个动作的数值很难工作 出来,通常是错误的。

  • 如果你关闭跟踪,你可以扔掉你的 speed() 个电话。