ch6-模块

来源:互联网 发布:单片机大学生毕业设计 编辑:程序博客网 时间:2024/04/30 05:22
6.0 模块
当退出py解释器并重新进入的时候,原先定义的变量、方法都会丢失。因此产生了
将这些东西写入文件的需求。将记录py定义的文件称为模块。模块中的定义可以
导入到另一个模块中。模块文件名就是模块名加上.py得到的。可以用全局变量
__name__来获取模块名。

6.1 深入模块
除了包含定义外,模块还包含了可执行语句。它们会在第一次被导入的地方执行。
每个模块都有自己私有的符号表,被模块内的所有函数定义作为全局符号表使用。
在文件A中导入模块B,那么模块B的名称就会被添加到文件A的全局符号表中。
有三种形式:
import module
from module import name
from module import *
6.1.1 作为脚本来执行模块
当使用py解释器直接执行模块的时候,模块中的代码就像是被导入一样,这时模块
的__name__被设置为__main__,所以如果想要测试模块,可以在模块中添加下面的
代码,并且使用py解释器执行:
if __name__ == "__main__":
    <test code>
6.1.2 模块的搜索路径
当导入一个spam模块的时候,py先后在当前目录下、环境变量PYTHONPATH目录列表
中、py默认按照路径搜索名为spam.py的文件。
6.1.3 “编译的”python文件
为了加快加载py模块的速度,py会在__pycache__目录下缓存每个模块编译后的版本。

6.2 标准模块
py带有一个标准模块库,并发布有独立的文档。

6.3 dir()函数
内置的dir()用于按模块名搜索模块定义,它返回一个字符串类型的存储列表。
无参调用的时候,会返回当前定义的命名

6.4 包
包通常是使用“圆点模块名”的结构化模块命名空间。使用包可以避免不同库之间的
模块的命名冲突。
为了让py把目录作为一个包,目录中必须包含__init__.py文件。这是为了避免无意
中模块被非模块的文件夹隐藏。
6.4.1 从*导入包
当用户写下from module import *的时候,理想中,py会找出所有包中的子模块,
然后导入他们,但这会出现很多意外情况,而且效率不高。解决方法是包的作者在
__init__.py中定义一个__all__的列表,然后按照这个列表导入包。如果没有定义
__all__那么from module import *并不会导入子模块,而仅仅是导入module模块。
6.4.2 包内引用
如果包内模块需要引用相邻的模块,那么可以使用相对路径来表示

6.4.3 多重目录中的包


参考文档http://www.pythondoc.com/pythontutorial3/modules.html

基于cc4.0发布

0 0