导入模块,导入另一个模块。Python

4
我可以帮助您翻译以下内容,这是关于编程的:

我很好奇当我们导入一个再次导入另一个模块时会发生什么。因此,我创建了两个模块:module1和module2。

module1:

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一样抛出同样的错误?


3
仅仅因为一个模块已经被执行,并不意味着 module 对象已经绑定到全局命名空间中的一个名称。尝试使用 module1.random.randint(0,10) - chepner
2个回答

6
每个模块都有自己的作用域(或命名空间,如果这个术语更熟悉的话)。如果你想从module2访问random,你需要在module2中导入它。解释器共享你执行的模块的作用域,所以只有在该模块的全局命名空间中声明的变量才能被访问。如果你想从仅已导入module2的解释器中访问random,你需要指定module1.random
另外,你可以用from module1 import *替换import module1。这将复制所有内容,包括对random的引用。因此random将在全局范围内可访问。

如果你不想在module2中导入random,你可以使用print(module1.random.randint(0,10)) - Sheshnath

1
因为您实际上没有将random导入到shell中,而只是导入包含该模块的文件。
我们可以以现有的模块tkinter为例,例如打开方式:
import enum
import sys

他们被导入到Tkinter模块中,但当您导入Tkinter时,它们不会随之而来。
简单地说,您的module1已经导入了random,但是导入module1并不会同时导入random

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接