我很好奇当我们导入一个模块然后导入另一个模块时会发生什么。所以我创建了两个模块: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
因此,当我导入random
时,我确定我确实导入了module1
。但是当我输入Shell print(random.randint(0,10))
时,它会抛出NameError: name 'random' is not defined
。因此,random
未从module1
导入。但在这种情况下,为什么module2
打印1
,并没有抛出与Shell相同的错误?
答案 0 :(得分:4)
每个模块都有自己的范围(或命名空间,如果您更熟悉该术语)。如果您想从random
访问module2
,则需要在module2
中导入random
。解释器共享您执行的模块的范围,因此只能访问在该模块的全局命名空间中声明的变量。如果您想从仅导入module2
的翻译中访问module1.random
,则需要指定import module1
。
或者,您可以将from module1 import *
替换为random
。这将复制所有内容,包括对random
的引用。因此,APPINSIGHTS_INSTRUMENTATIONKEY = "INSTRUMENTATION KEY"
可以在全球范围内访问。
答案 1 :(得分:0)
这是因为你实际上没有将随机导入shell,而只是包含模块的文件。
我们可以使用现有模块作为示例,例如使用以下命令打开的tkinter:
import enum
import sys
它们会导入到Tkinter模块中,但是当你导入Tkinter时,它们不会随附它。
要尽可能简单地将module1
随机导入,但提升module1
也不会导入random