从C#到Python —— 5 模块和包
2010-09-30 22:41:39 来源:WEB开发网除了Python脚本(不仅限于py,还包括pyc和pyo),import语句还可以导入C或C++扩展(已编译为共享库或DLL文件)、包(包含多个模块,一会介绍)和内建模块(使用C编写并已链接到Python解释器内)。不过除了包,另外两个我也没用过:(
Python解释器在第一次import一个py文件的时候,会尝试将其编译为字节码文件,这个文件的扩展名通常为.pyc,它是已经完成语法检查并转译为虚拟机指令的代码。后边的导入操作会直接读取.pyc文件而不是.py文件,一般而言速度会更快。
5.2 包
Python的模块可以按目录组织为包(package)。一般来说,我们将多个关系密切的模块组织成一个包,以便于维护和使用,同时可有效避免名字空间冲突。创建一个包的步骤是:建立一个名字为包名字的文件夹,并在该文件夹下创建一个__init__.py文件,你可以根据需要在该文件夹下存放脚本文件、已编译扩展及子包。
一个典型的包可能有以下结构:
1 package1/
2 __init__.py
3 subPack1/
4 __init__.py
5 module_11.py
6 module_12.py
7 module_13.py
8 subPack2/
9 __init__.py
10 module_21.py
11 module_22.py
12 ……
只要目录下存在__init__.py,就表明此目录应被作为一个package处理。在最简单的例子中,__init__.py 是一个空文件,不过一般我们都要在__init__.py中做一些包的初始化动作,或是设定一些变量。
最常用的变量是__all__。当使用包的人在用from pack import * 语句导入的时候,系统会查找目录pack下的__init__.py文件中的__all__这个变量。__all__是一个list,包含了所有应该被导入的模块名称,例如:__all__ = ["m1", "m2", "m3"] 表示当from pack import * 时会import 这三个module。
更多精彩
赞助商链接