免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1514 | 回复: 0
打印 上一主题 下一主题

import辨析 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-26 18:36 |只看该作者 |倒序浏览

                                                                                下文的分析以下面的文件结构为例:
a/
    __init__.py (内容A情况: b="BBB",B情况为空文件)
    b/
        __init__.py    (内容 “import c,os”)
        c.py               (内容“f=‘test’”)
1. import xxx: 从Python Reference Manual之6.12 The import statement可知 xxx必须为module,
而from yyy import zzz中,zzz只要是identifier即可,当然。
所以 import a.b.c.f 错误,from a import b.c也错误(因为b.c不是identifier),而from a.b.c import f 正确。import xxx as yyy同样要求yyy为identifier。
2. 所有被导入的module都被加入了sys.modules。执行了import a.b 后,sys.modules里会增加 a 键 以及 a.b 键,值分别为对应的module类型的对象,包含文件路径信息。
>>> a
>>> a.b
>>> a.__file__
'a/__init__.pyc'
如果module为package,则文件路径为对应的__init__.py文件。
另外:由于b包的__init__.py中import c,mutex,所以sys.modules还会增加a.b.c和a.b.mutex以及mutex键,但是他们有所不同,sys.modules中的键体现了在PYTHONPATH下的module 路径:
'a.b.mutex': None,
'mutex':
'a.b.c':
------
不过访问a.b.mutex则和预想中的相同(见3),
>>> a.b.mutex
>>> a.b.c
3. 执行 import a.b 的module的globals字典里只会增加 a 这个identifier(由import的语法可知,此处a.b为模块,所以情况A和B中并无不同),同时a的__dict__里会加入b键。
>>> a.__dict__['b']
4.import a后,
   (1)对情况A:a.b为“BBB”
   (2)对情况B:a.b则提示出错"AttributeError: 'module' object has no attribute 'b'"。因为在访问a.b时,系统会访问a的__dict__,但是只有import a.b(而不是import a)才会在sys.modules加入'a.b'键,才会在a.__dict__里加入b键!
5. 关于import的使用指导:
(1)How can I have modules that mutually import each other?
http://www.python.org/doc/faq/programming/#how-can-i-have-modules-that-mutually-import-each-other
(2)What are the "best practices" for using import in a module?
http://www.python.org/doc/faq/programming/#what-are-the-best-practices-for-using-import-in-a-module
[/url]


本文来自ChinaUnix博客,如果查看原文请点:[url]http://blog.chinaunix.net/u/8650/showart_287044.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP