Python从turtle导入*和导入turtle差异
我试图使用一本关于python的书,我知道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>
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
教程都会介绍移动海龟的基础知识。请在这里张贴之前参考这些。