Python从turtle导入*和导入turtle差异

Python从turtle导入*和导入turtle差异,python,turtle-graphics,python-turtle,Python,Turtle Graphics,Python Turtle,我试图使用一本关于python的书,我知道fromturtleimport*将所有内容导入当前名称空间,而import-turtle只是将模块引入,以便将其作为类调用。不过,当我尝试后一种方法时,它就坏了 >>> import turtle >>> t = turtle.pen() >>> t.pen.forward(10) Traceback (most recent call last): File "<pyshell#2>

我试图使用一本关于python的书,我知道
fromturtleimport*
将所有内容导入当前名称空间,而
import-turtle
只是将模块引入,以便将其作为类调用。不过,当我尝试后一种方法时,它就坏了

>>> import turtle
>>> t = turtle.pen()
>>> t.pen.forward(10)
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
   t.pen.forward(10)
AttributeError: 'dict' object has no attribute 'pen
导入海龟 >>>t=海龟。钢笔() >>>t.pen.前进(10) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 t、 笔锋(10) AttributeError:“dict”对象没有属性“pen”
但是,使用turtle import*中的
,将
指定给对象并键入命令
forward
可以正常工作。这不是书上说要做的,但它是唯一有效的东西。发生了什么事?

如果书上说:

import turtle
t = turtle.pen()
t.forward(10)
那么它可能是一个拼写错误:

import turtle
t = turtle.Pen()
t.forward(10)
其中,
Pen
Turtle
的同义词——我们以前在这里看到过这个问题。(小写
pen()

据我所知,
从turtle import*
将所有内容导入 当前名称空间在导入turtle时
只是将模块引入,以便 可以称为类

我的建议是:两者都不要用。相反,你应该:

from turtle import Screen, Turtle

screen = Screen()
turtle = Turtle()

turtle.forward(10)
# ...
screen.exitonclick()

原因是Python turtle公开了两个编程接口,一个是函数接口(面向初学者),另一个是面向对象接口。(函数接口是在库加载时从面向对象接口派生出来的。)使用其中任何一个都可以,但同时使用两者都会导致混淆和错误。上述导入提供了对面向对象接口的访问,并阻止了功能接口。

根据您的代码,
t
是函数
pen()
的结果。它是笔字典,没有
forward
方法,更没有
pen.forward()
东西。看<代码>乌龟。前进(10)
应该可以。等等,你为什么要用
笔做任何事情<代码>海龟。笔
用于配置笔属性。它与您尝试执行的操作没有任何关系。将默认的turtle向前移动将是
turtle.forward(10)
,而不是
t.pen.forward(10)
import
的差异在许多其他帖子中都有提及。任何
turtle
教程都会介绍移动海龟的基础知识。请在这里张贴之前参考这些。