导入模块,即导入另一个模块。 Python
Import module, that import another module. Python
我很好奇当我们导入一个模块又导入另一个模块时会发生什么。所以我创建了两个模块:module1 和 module2.
模块 1:
import random
print(random.randint(0,10))
print("module1 work")
模块 2:
import module1
print("module2 work")
当我 运行 module2 它给我这个输出:
1
module1 work
module2 work
所以,当我导入 module1
时,我决定我确实导入了 random
。但是当我输入 Shell print(random.randint(0,10))
时,它会抛出一个 NameError: name 'random' is not defined
。所以 random
不是从 module1
导入的。但在这种情况下,为什么 module2
打印 1
,并且没有抛出与 Shell 相同的错误?
每个模块都有自己的范围(或名称空间,如果您更熟悉该术语的话)。如果要从 module2
访问 random
,则需要在 module2
中导入它。解释器共享您执行的模块的范围,因此只能访问在该模块的全局命名空间中声明的变量。如果你想从只导入 module2
的解释器访问 random
,你需要指定 module1.random
.
或者,您可以将 import module1
替换为 from module1 import *
。这将复制所有内容,包括对 random
的引用。因此 random
将可在全球范围内访问。
这是因为您实际上并没有将随机导入 shell,而只是导入包含模块的文件。
我们可以使用现有模块作为示例,例如打开的 tkinter:
import enum
import sys
它们导入到 Tkinter 模块中,但是当您导入 Tkinter 时,它们并没有附带。
尽可能简单地说,您的 module1
已随机导入,但导入 module1
不会同时导入 random
我很好奇当我们导入一个模块又导入另一个模块时会发生什么。所以我创建了两个模块:module1 和 module2.
模块 1:
import random
print(random.randint(0,10))
print("module1 work")
模块 2:
import module1
print("module2 work")
当我 运行 module2 它给我这个输出:
1
module1 work
module2 work
所以,当我导入 module1
时,我决定我确实导入了 random
。但是当我输入 Shell print(random.randint(0,10))
时,它会抛出一个 NameError: name 'random' is not defined
。所以 random
不是从 module1
导入的。但在这种情况下,为什么 module2
打印 1
,并且没有抛出与 Shell 相同的错误?
每个模块都有自己的范围(或名称空间,如果您更熟悉该术语的话)。如果要从 module2
访问 random
,则需要在 module2
中导入它。解释器共享您执行的模块的范围,因此只能访问在该模块的全局命名空间中声明的变量。如果你想从只导入 module2
的解释器访问 random
,你需要指定 module1.random
.
或者,您可以将 import module1
替换为 from module1 import *
。这将复制所有内容,包括对 random
的引用。因此 random
将可在全球范围内访问。
这是因为您实际上并没有将随机导入 shell,而只是导入包含模块的文件。
我们可以使用现有模块作为示例,例如打开的 tkinter:
import enum
import sys
它们导入到 Tkinter 模块中,但是当您导入 Tkinter 时,它们并没有附带。
尽可能简单地说,您的 module1
已随机导入,但导入 module1
不会同时导入 random