`import turtle` 和 `from turtle import *` 有什么区别?
What is the difference between `import turtle` and `from turtle import *`?
除了语法上的差异,我不明白 import turtle
和 from 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.Pen
或 turtle.Turtle
.
方法二
您没有导入包 turtle
,因此您根本无法使用它。事实上,您实际上是从命名空间导入每个成员,因此您可以只使用项目的名称,如 Pen
或 Turtle
中所见,它们被定义为包含在命名空间中。
"import turtle brings" 模块和 "from turtle import *" 从模块中获取对象。
如果我这样做
import sys
我输入
sys.exit()
如果我这样做
from sys import *
我只输入
exit()
除了语法上的差异,我不明白 import turtle
和 from 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.Pen
或 turtle.Turtle
.
方法二
您没有导入包 turtle
,因此您根本无法使用它。事实上,您实际上是从命名空间导入每个成员,因此您可以只使用项目的名称,如 Pen
或 Turtle
中所见,它们被定义为包含在命名空间中。
"import turtle brings" 模块和 "from turtle import *" 从模块中获取对象。
如果我这样做
import sys
我输入
sys.exit()
如果我这样做
from sys import *
我只输入
exit()