`import turtle` 和 `from turtle import *` 有什么区别?

What is the difference between `import turtle` and `from turtle import *`?

除了语法上的差异,我不明白 import turtlefrom turtle import * 之间的区别是什么,因为这两种方法似乎产生相同的结果:

方法一

import turtle

t = turtle.Pen()

# rest of program...

方法二

# Method 2:

from turtle import *

t = Turtle()

# rest of program...

我遵循的一个 Internet 教程使用了方法 1,另一个使用了方法 2。这两者有什么区别,我应该在什么时候使用它们?

除了纯粹的语义之外,还有很好的理由不这样做:

from module import *

它污染了命名空间,您无法轻松找到刚刚包含的内容。

通过声明:

import module

您将模块加载到命名空间中,但限制其中的所有内容。这可以让您准确地知道您导入了什么,因此如果您有 module.a 和一个定义,您不必担心覆盖 module.a.

和上面的link有相同的导入语句。

其余取决于包结构:具体模块是否留空 init.py 或通过 all = 定义模块[...]

如果定义了all,则导入为那些子模块,如果没有,则导入模块,然后重命名子模块。

如此处所示,强烈建议不要使用 import * 变体(一些 Pythonista 甚至表示他们希望永远不允许这样做): What exactly does "import *" import?

方法一

您只是导入包 turtle,您可能已经知道,您无法使用未声明的变量。因此,您必须以包名称作为前缀引用每个项目,例如 turtle.Penturtle.Turtle.


方法二

您没有导入包 turtle,因此您根本无法使用它。事实上,您实际上是从命名空间导入每个成员,因此您可以只使用项目的名称,如 PenTurtle 中所见,它们被定义为包含在命名空间中。

"import turtle brings" 模块和 "from turtle import *" 从模块中获取对象。

如果我这样做

import sys

我输入

sys.exit()

如果我这样做

from sys import *

我只输入

exit()