一 模块和包概述:
(1)模块是组织Python代码的方法,包则是用来组织模块的。每一个文件都是一个模块,模块导入其它模块之后就可以使用导入模块定义的变量名。包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境。
(2)模块的作用:代码重用、变量名的封装、系统命名空间的划分和共享服务和数据。
(3)Python自带标准库模块,这个集合大约200个模块,主要包括:操作系统接口、对象永久保存、文字模块匹配、网络和Internet脚本和GUI等。
(4)模块搜索路径:
*模块搜索顺序:主目录->PYTHONPATH环境变量目录(把自定义模块路径添加到PYTHONPATH变量)->标准库目录(选自Python学习手册)。
*sys.path变量值(列表):是模块搜索的路径,Python在程序启动时进行配置,自动将PYTHONPATH的设置值合并到sys.path列表中。sys.path列表可以被修改,可以调用列表的append()方法添加新的搜索路径等。
*sys.modules:找出当前导入哪些模块和它们来自什么地方。sys.modules是一个字典,使用模块名作为键,对应物理地址作为值。
(5)__builtins__模块:包含内建名称空间中内建名字的集合。该模块包含内建函数、异常以及其它属性。可使用dir()和help()查看模块的函数、属性等。
(6)globals()和locals()内建函数分别返回调用者全局和局部名称空间的字典。
二 模块的导入:
(1)语法:
*import module1或import module1[,module2...moduleN]:一般情况一行导入一个模块,可读性更好。
*from module import name1 [,name2..nameN]:从模块导入指定的模块属性。使用这个则不用使用"."句点标识符来访问模块的标识符了。from语句是import语句的扩展,照常导入了模块文件(module文件会执行,但是dir()并没有这个module,即module.xx不行,还需要import module),但多了一个步骤,将文件中的一个或多个变量名从文件中复制了出来。
*from module import *:导入模块的所有属性,不建议使用。与import使用相同的导入工作,from*只是多了个步骤,把模块中所有变量名都复制到了进行导入的作用域之内,从根本上说即把一个模块的命名空间融入另一个模块中。
*from module import name1 as name2或import module as name1:使用自定义的名字替换模块的原始名字。
*reload函数可以重新导入一个已经导入的模块,relaod重新导入时会执行模块中代码。这个函数在Python2.x中是内置函数,Python3中不是(python3.x:import imp imp.reload(模块名))。注意:reload是不可传递的,重载一个模块的话只会重载该模块,而不能重载该模块所导入的任何模块。
(2)import工作方式:
*导入是运行时的运算,程序第一次导入指定文件时,会执行三个步骤:(1)搜索找到模块文件 (2)编译成字节码(可选) (3)执行模块文件
*搜索模块:import从模块搜索路径(sys.path)查找模块文件。
*编译:找到模块源代码文件后,如果必要的话,Python会将其编译成字节码。Python会检查字节码文件和源代码文件的时间戳。模块在导入是就会进行编译,只有被导入文件才会在机器上留下.pyc文件,顶层文件的字节码是在内部使用后就丢弃了。
*执行:import的最后操作就是执行模块的字节码文件。
(3)特性:
*导入模块导致这个模块顶层代码(无缩进的代码)被直接执行。只把函数和模块定义放入模块的顶层是良好的编程风格。可以通过检查__name__判断模块是被导入或直接执行。
*一个模块只被加载一次,无论它被导入多少次。
*若不想让某一个模块属性(数据和函数等)被"from module import *"导入,则可以在该属性名称前面加一个'_'。不过若你导入了整个模块或者显示导入改属性,整个隐藏方法就没用了。
三 包的导入:
四 常用的模块: