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

为什么Python的import语句的from形式绑定模​​块名称?

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

为什么Python的import语句的from形式绑定模​​块名称?

从导入系统文档中:

当使用任何机制(例如

importlib
API,
import
或,
import-from

语句或内置
__import__()
)加载子模块时,将在父模块的名称空间中放置与子模块对象的绑定。例如,如果package
spam
具有一个子模块
foo
,则在导入后
spam.foo
spam
将具有
foo
绑定到该子模块的属性。假设您具有以下目录结构:

spam/    __init__.py    foo.py    bar.py

spam/__init__.py
包含以下几行:

from .foo import Foofrom .bar import Bar

然后执行以下命令,将名称绑定到

foo
bar
放在
spam
模块中:

>>> import spam>>> spam.foo<module 'spam.foo' from '/tmp/imports/spam/foo.py'>>>> spam.bar<module 'spam.bar' from '/tmp/imports/spam/bar.py'>

鉴于Python熟悉的名称绑定规则,这似乎令人惊讶,但这实际上是导入系统的基本功能。不变的条件是,如果您有

sys.modules['spam']
and
sys.modules['spam.foo']
(如在上述导入之后一样),则后者必须作为
foo
前者的属性出现。

如果这样做

from testapp.api.utils import x
,import语句将不会加载
utils
到本地名称空间中。但是,导入机制

加载
utils
testapp.api
名称空间中,以使进一步的导入工作正常。碰巧您的情况
testapp.api
也是本地名称空间,所以您会感到惊讶。



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

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

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