除了语法上的差异,我不明白from turtle import *
和import turtle
t = turtle.Pen()
# rest of program...
之间的区别是什么,因为两种方法似乎产生相同的结果:
方法1
# Method 2:
from turtle import *
t = Turtle()
# rest of program...
方法2
{{1}}
我遵循的一个互联网教程使用方法1,另一个使用方法2.两者之间的区别是什么?我应该何时使用每一个?
答案 0 :(得分:4)
您只是导入包turtle
并且您可能已经知道,您无法使用尚未声明的变量。因此,您必须使用包名称引用每个项目作为turtle.Pen
或turtle.Turtle
之类的前缀。
您没有导入包turtle
,因此您根本无法使用它。实际上,您实际上是从命名空间导入每个成员,因此您可以使用Pen
或Turtle
中所示的项目名称,这些名称被定义为包含命名空间。“ / p>
答案 1 :(得分:1)
除了纯粹的语义之外,还有很好的理由不这样做:
from module import *
它污染了命名空间,你没有简单的方法来查找你刚刚包含的内容。
陈述:
import module
您将模块加载到命名空间中,但限制其中的所有内容。这可以让您准确了解导入的内容,因此如果您有module.a和已定义的内容,则不必担心覆盖模块.a。
它与上面的链接具有相同的import语句。
其余的取决于包结构:特别是模块是否留下空白 init .py或通过所有 = [...]
如果全部已定义,则导入为子模块,否则导入模块,然后重命名子模块。
如图所示,非常不鼓励进口*品种(一些Pythonist甚至表示他们希望永远不允许): What exactly does "import *" import?
答案 2 :(得分:1)
“import turtle带来”模块和“from turtle import *”带来模块中的对象。
如果我这样做
import sys
我输入
sys.exit()
如果我这样做
from sys import *
我输入
exit()