导入Turtle图形模块

时间:2014-04-21 21:12:58

标签: python turtle-graphics

我承认我刚刚开始使用Python 3.3中的turtle图形,并且在使用from turtle import *开始的YouTube演示之后。这允许使用fd(100)这样的短命令来代替我经常看到的格式turtle.forward(100)等。

我的问题是:

  1. 使用这种格式我使用的是不可接受的快捷方式吗?
  2. 如何阻止Python IDLE将此格式的每个命令解释为" Turtle graphics"?
  3. 是" *"后缀意味着通常的意思,"一切"?
  4. 如果我不应该在一个帖子中提出多个问题,我会提前道歉,但它们彼此相关,这似乎是合乎逻辑的。

2 个答案:

答案 0 :(得分:2)

通常,是的,您确实希望避免使用from module import *形式。这样做是因为它打开了模块(一个普通的python文件),并且基本上接受了该文件中定义的每个函数,类等,并将其添加到您的命名空间。你是对的 - *的意思是"一切都是"。

因此,如果我编写了一个名为foo.py的模块,其中包含一个名为bar1bar2等的函数,那么执行from foo import *将允许我使用这些函数,就像我在当前文件中定义了它:

from foo import *

bar1()
bar2()
# etc

这很糟糕的主要原因是它需要未知数量的函数和类并将其转储到命名空间中。当您突然开始使用某个功能时,很难跟踪更大代码库中的内容。例如:

from a import *
from b import *
from c import *
# etc

example()
# Where did this come from? From module a, b, or c? What if both a and b define a 
# function named 'example'? 

您已经了解import module; module.function表单,但第三种表单也很有用:

from turtle import fd, right, left  # etc

right(90)
fd(100)
backwards(300) # throws an error!
forwards(300)  # throws an error!

现在,我可以挑选我想要的功能,知道它们来自哪里,并避免污染我的命名空间。

但是,在你的情况下,我不会过分担心它。由于您正在尝试和学习如何使用海龟模块,我认为将重点放在那个方面而不是编写完美的惯用Python更为重要。

答案 1 :(得分:0)

使用from package import *您只需导入由您导入的软件包定义的__init__.py文件__all__变量中可选定义的所有内容。 __all__变量可能会被省略,这就是 read the details

的原因

我大部分时间都使用"导入包"只是为了避免污染命名空间。