栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

导入模块:__main__ vs作为模块导入

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

导入模块:__main__ vs作为模块导入

__name__
变量总是包含模块的名称, 除非 当该文件已被加载到解释作为脚本来代替。 然后 将该变量设置为字符串
'__main__'

毕竟,脚本随后将作为整个程序的主文件运行,其他所有内容都是由该主文件直接或间接导入的模块。通过测试

__name__
变量,您可以因此检测文件是作为模块导入的还是直接运行的。

在内部,为模块提供了一个命名空间字典,该字典作为每个模块的元数据的一部分存储在中

sys.modules
。主文件(已执行的脚本)的存储结构与相同
'__main__'

但是,当您将文件导入为模块时,python首先

sys.modules
查看该模块是否已经导入。因此,
importmod1
意味着我们首先寻找
sys.modules
mod1
模块。如果
mod1
还没有命名空间,它将创建一个新的模块结构。

因此,如果您都

mod1.py
作为主文件运行, 然后 又将其作为python模块导入,则它将在中获得 两个
名称空间条目
sys.modules
。一次为
'__main__'
,然后为
'mod1'
。这两个名称空间是完全分开的。您的全球
var1
存储在
sys.modules['__main__']
,但
func1B
期待中
sys.modules['mod1']
var1
,它在哪里
None

但是,当您使用时

pythondriver.py
,它将成为程序
driver.py
'__main__'
主文件,并且
mod1
只会被导入到
sys.modules['mod1']
结构中一次。这次,
func1A
将其存储
var1
sys.modules['mod1']
结构中,这
func1B
将是发现的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414538.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号