1. 模块
- 一个模块就是一个包含Python代码的文件(.py文件)
- 为什么使用模块
- 程序太大,编写维护不方便,需要拆分
- 模块可以增加代码重复利用
- 当做命名空间使用,避免命名冲突
- 如何定义模块
- 根据模块规范,模块中需要编写以下内容
- 函数(单一功能)
- 类(相似功能的组合,或者类似业务模块)
- 测试代码
- 根据模块规范,模块中需要编写以下内容
- 如何使用模块
- 模块直接导入
import module_name
module_name.function_name
module_name.class_name - 借助importlib包可以实现导入以数字开头的模块名称
- import module_name as 别名(给模块取别名)
- from module_name import function_name, class_name
- from module_name import * (导入该模块所有)
- 模块直接导入
- if name == ‘main’:(该判断语句作为程序入口)
- 避免模块代码被导入时被动执行
2. 模块搜索路径和存储
- 模块搜索路径
- 加载模块时,系统会在搜索模块的位置
- 系统默认模块搜索路径
- import sys
sys.path #属性可以获取路径列表
- import sys
- 添加搜索路径
- sys.path.append(dir)
- 模块加载顺序
- 内存中加载好的模块
- Python内置模块
- 搜索sys.path路径
3. 包
- 包是一种 组织管理代码的方式,模块存放于包中
- 用于将模块包含在一起的文件夹就是包
- 自定义包的结构
- 包的导入操作
- import package_name
- 直接导入一个包,可以使用__init__.py中的内容
- 使用方式
package_name.func_name
package_name.class_name.func_name()
- import package_name as p
- import package.module_name
- 导入包中的某个模块
- 使用方法
package.module.func_name
package.module.class.func()
- import package.module as pm
- from package_name import module_name
- 此种导入方法不执行__init__内容
- from package import *
- 导入当前包’init.py’文件中的所有函数和类
- 使用方法
func_name()
class_name.func_name()
class_name.var
- from package.module import *
- 导入包中指定模块的所有内容
- 使用方法
func_name()
class_name.func_name()
- 在开发环境中经常会用其他模块,可以在当前包中直接导入其他模块内容
- import完整的包或者模块路径
- __all__的用法
- 在使用from package import *时,*可以导入的内容
- 如果__init__.py为空,或者没有__all__,那么只可以把__init__中
的内容导入 - __init__如果设置了__all__的值,那么则按照__all__指定的子包或者
模块进行导入,不会再载入__init__中的内容
all=[‘module1’,‘module2’,‘package1’,…]
- import package_name
命名空间
- 用于区分不同位置不同功能但名称相同的函数或者变量的一个特定前缀
- 作用是防止命名冲突
4. 异常
- 在Python中,异常是一个类,可以处理和使用
- Python异常处理模块语法:
try:
pass(可能会出错的代码)
except 异常类型1:
解决方案
except 异常类型2:
解决方案
else:
如果没有出错,执行此代码
finally:
不管有没有异常都要执行的代码- except至少一个,else和finally可选
- 自己定义异常
- 自定义异常必须是系统异常的子类
5. 常用模块
- 模块使用时需要先导入,string是特例
- calendar (import calendar)
- 和日历相关的模块
- isleap;判断某一年是否是闰年
- leapday:获取指定年费之间闰年个数
- monthrange:获取一个月的周记开始,和天数
- monthcalen:返回一个月每天的矩阵列表
- prmonth:打印一个月的日历
- weekday:获取周几
- time
- 时间戳
- 一个时间表示(根据不同语言,可以是整数或者浮点数)
- 从1970年1月1日0时0分0秒到现在经历的秒数
- 时间差太远会出现异常
- 32位操作系统能够支持到2038年
- UTC时间
- 世界协调时间,也叫时间标准时间
- 中国时间是:UTC+8 东八区
- 夏令时
- 时间元组
- 一个包含时间内容的普通元组
- timezone:当前时区和UTC时间相差的秒数,在没有夏令时的情况下的间隔
- altzone:和timezone函数一样
- daylight:检测当前是否是夏令时状态,0表示是
- time.time() 得到时间戳
- time.localtime() 得到当前时间的时间结构
可以通过点号操作符得到相应属性元素的内容 - asctime:返回元组正常字符串化之后的时间格式
- ctime:获取字符串化后的当前时间
- mktime:使用时间元组获取对应的时间戳
- clock:获取cpu时间
- sleep:使程序进入睡眠,n秒后继续(延迟)
- strftime:将时间元组转化为自定义的字符串格式
- 时间戳
- datetime
- 提供日期和时间的运算和表示
- date:一个理想和的日期,提供year,month,day属性
- time:提供hour,minute,sec,microsec等属性
- datetime:提供日期和时间组合
- today
- now
- utcnow
- fromtimestamp:从时间戳返回本地时间
- timedelta:提供一个时间差,时间长度
- timeit:时间测量工具
- os
- 操作系统相关
- os.path
- 系统路径相关操作
- os.getcwd:获取当前工作目录,返回字符串
- os.chdir:改变当前工作目录(change directory)
- os.listdir:获取一个目录中所有子目录和文件的名称列表
- os.makedirs:递归创建文件夹
- os.system:运行系统shell命令
- os.getenv:获取指定的系统环境变量值
- exit:退出当前程序
- 值部分
- os.curdir:current dir 当前目录
- os.pardir:parent dir 父目录
- os.sep:当前系统的路径分隔符
- os.linesep:当前系统的换行符
- os.name:当前系统名称
- windows:nt
- unix,linux,mac:posix
- os.path模块
- os.path.abspath:将路径转化为绝对路径
- linux中.表示当前目录,…表示父目录
- os.path.join:将多个路径拼合成一个路径
- os.path.split:将路径切割为文件夹部分和当前文件部分,返回类型为元组
- os.path.exists:检测文件或目录是否存在
- os.path.abspath:将路径转化为绝对路径
- shutil
- shutil.copy:复制文件,同时可以给文件重命名
- shutil.copy2:复制文件,保留原文件信息
- shutil.file:讲一个文件中的内容复制到另外一个文件中
- shutil.move:移动文件/文件夹
- shutil.make_archive:归档操作
- 归档:把多个文件或文件夹合并到一个文件中
- 压缩:用算法把多个文件或文件夹无损或者有损合并到一个文件中
- shutil.unpack_archive:解压
- zip
- 模块名称;zipfile
- zipfile.ZipFile:创建一个ZipFile对象,表示一个zip文件
- zipfile.getinfo:获取zip文档内指定文件的信息
- zipfile.namelist:获取zip文档内所有文件名称列表
- zipfile.extractall:解压所有文件到当前目录
- random
- 随机数,所有随机模块都是伪随机
- random.random:获取0-1之间的随机小数
- random.choice:随机返回序列中的某个值
- random.shuffle:随机打乱列表
- random.randint:返回包含a到b之间的随机整数