导入模块,即导入另一个模块。 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