第七章 Python之模块与包
模块介绍
一个模块就是包含了一组功能的python文件(例如module.py,模块名是module),它从文件级别组织程序,更方便管理,这时我们不仅仅可以把这些文件当作脚本执行,还可以把他们当作模块来导入到其他模块中,实现了功能的重复利用。同时我们也可以下载别人写好的模块导入到自己的项目中使用,可以提高开发效率
#在python中,模块的使用方式都是一样的,模块可以细分为四个通用类别: 1 使用python编写的.py文件 2 已被编译为共享库或DLL的C或C++扩展 3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包) 4 使用C编写并链接到python解释器的内置模块
模块的使用
import 模块名
import spam #第一次导入模块:(重复导入只会引用之前加载好的结果) #1.产生一个新的名称空间 #2.运行spam代码,产生的名字都存放于新的名称空间中,运行过程中global关键字指向的就是该名称空间 #3.在当前名称空间拿到一个名字spam,该名字指向1的名称空间(使用spam.名字来访问spam文件中定义的名字) #被导入的模块在执行过程中使用自己独立的名称空间作为全局名称空间
import spam as s #(为被导入模块spam起别名) import spam,time,os #(一行导入多个模块)
from 模块名 import 名字
#优点:引用时不用加前缀,简单 #缺点:容易与当前名称空间起冲突 from spam import * #把spam中所有的不是以下划线(_)开头的名字都导入到当前位置 __all__=['money','read1'] #在另一个文件中用from spam import * 就能导入列表中规定的名字
模块的搜索路径
内存中已经加载的模块->内置模块->sys.path路径中包含的模块
# 1、在第一次导入某个模块时(比如spam),会先检查该模块是否已经被加载到内存中(当前执行文件的名称空间对应的内存),如果有则直接引用 # ps:python解释器在启动时会自动加载一些模块到内存中,可以使用sys.modules查看 # 2、如果没有,解释器则会查找同名的内建模块 # 3、如果还没有找到就从sys.path给出的目录列表中依次寻找spam.py文件 sys.path.append(r'%s'%filepath) #将被导入文件的绝对路径添加到sys.path中
一个python文件的两种用途
(1).脚本:一个文件就是整个程序,用来被执行
(2).模块:文件中定义了很多功能,用来被导入使用
#python为我们内置了全局变量__name__ #当文件被当作脚本执行时,__name__ 等于 '__main__' #当文件被当作模块执行时,__name__ 等于 模块名 if __name__ == '__main__': #测试语句
包介绍
包就是一个包含有_init_.py文件的文件夹,创建包的目的就是为了用文件夹将文件/模块组织起来,以此来提高程序的结构性和可维护性。创建包的目的不是为了运行,而是被导入使用,包的本质就是一种模块
包的使用
#1.包导入语句也分为import和from..import..两种,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法 #2.import文件,产生名称空间中的名字来源于文件,import包,产生的名称空间的名字同样来源于文件,即包下的__init__.py,导入包本质就是在导入该文件 #3.环境变量都是以执行文件为准的 from package1.package2 import m1 #绝对导入 from .package2 import m1 #相对导入(.代表当前路径)
软件开发规范
#bin---程序入口,存放可执行启动文件 #conf---存放配置文件 #src---存放核心代码 #db---存放数据 #lib---自定义库或常用工具 #log---存放日志 #readme---软件功能介绍