千家信息网

为什么Python的__import__需要fromlist

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,为什么Python的__import__需要fromlist,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。在Python中,如果要以
千家信息网最后更新 2025年01月23日为什么Python的__import__需要fromlist

为什么Python的__import__需要fromlist,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

在Python中,如果要以动态方式导入模块,可以执行以下操作:

module = __import__('module_name')

如果要导入子模块,你可能认为这只是一个简单的问题:

module = __import__('module_name.submodule')

结果呢,当然不起作用了,你必须这么做:

module = __import__('module_name.submodule', fromlist=['xxx'])

为什么?实际值fromlist似乎根本不重要,只要它不是空的就行。

实际上,__import__内部也是import来实现的。
那么我们在使用import的时候,一般有以下五种方式:

import pkg
import pkg.mod
from pkg import mod, mod2
from pkg.mod import func, func2
from pkg.mod import submod

在前两种情况下,import语句将最左侧模块对象分配给了: pkg。之后的import pkg.mod可以这样使用pkg.mod.func(),因为import语句引入了本地的模块pkg,这是一个具有mod属性的模块对象。因此__import__函数必须返回最左侧的模块对象,以便将其分配给pkg。这两种情况相当于

pkg = __import__('pkg')
pkg = __import__('pkg.mod')

后面三种情况,import就必须做更多的工作了,它必须从模块对象获取并分配多个名称。但是__import__函数只能返回一个对象,并且它不能从模块对象中检索出多个名字,所以对于第三种情况就是:

pkg = __import__('pkg')
mod = pkg.mod
mod2 = pkg.mod2

但是如果mod和mod2在该模块pkg中尚未导入,那将无法生效。__import__函数需要知道mod和mod2是它可以访问的名称,以便它可以查看他们是否是模块并且尝试导入他们。所以像一下这个方式更为接近:

pkg = __import__('pkg', fromlist=['mod', 'mod2'])
mod = pkg.mod
mod2 = pkg.mod2

这会导致__import__先尝试pkg.mod和pkg.mod2,如果不生效的话,它并不会抛出异常。但是第五种例子按照以上方式依然不行:

tmp = __import__('pkg.mod', fromlist=['submod'])
submod = tmp.submod

我们希望tmp是pkg.mod模块,但实际上它还是pkg模块。如果是按照我们想的这种方式去加载,那就要增加更多额外的解包工作。所以它就直接返回了最右边的模块,当且仅当fromlist里面不是空的时候

__import__函数中的fromlist实际上是没有具体含义的,你可以理解为它只是一种标记,当它不为空的时候,import将为我们导入前面所写的字符串中最右边的模块。当它为空的时候,import将为我们导入字符串最左边的模块,仅此而已。

关于为什么Python的__import__需要fromlist问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

模块 对象 方式 函数 实际 情况 时候 更多 问题 实际上 分配 只是 右边 名称 多个 字符 字符串 语句 尝试 工作 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 开封品家网络技术有限责任公司 常见数据库增删改查优化 实况数据库更新几次 赛尔互联网科技有限公司 2288服务器pci总线驱动 服务器找不到命令怎么办 南京网络安全职业技术学院怎样 如何输出链表中第i个数据库 数据库还原3101 浙江正泰网络技术有限公司保安 小优服务器安全 国家网络安全宣传周相关资料 如何安装be服务器 网络安全法什么时间正式实施 软件开发和测试哪个好 中域互联网科技 vivo网络安全拦截 计算机三级网络技术几个大题 安卓软件开发就业难 深圳软件开发收费标准 直播平台服务器维护中什么意思 流放者柯南服务器寻宝 外文科技期刊数据库评职称可用吗 网络安全与执法专业不需体检 网站服务器安全级别 我的世界变形服务器手机版 网络安全技术与应用贾铁军 软件开发模型测试 物理引擎和服务器的关系 软件开发规范 下载
0