包、模块
函数——>工具;模块——>工具箱;包——>工具库。在工具箱里放到是类似的工具,工具库里放着各种工具箱。
函数和模块的关系:模块是用来管理函数的。
模块和包的关系:包是用来管理模块的。
如何制作模块?如何创建包?
函数的本质:是可以调用的内置或自定义的程序;模块的本质:是py文件;包的本质是:文件夹。
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。而这样的一个py
文件在Python中称为模块(Module)。
包
什么是包
当一个项目中模块越来越多,维护和开发不是那么高效的时候,我们可以引入一种比模块更高级语法:包。
包是对相关功能的模块py
文件的组织方式。
包可以理解为文件夹,更确切的说,是一个包含__init__
文件的文件夹。
导入包的语法
-
import 包名[.模块名 [as 别名]]
-
from 包名 import 模块名 [as 别名]
-
from 包名.模块名 import 成员名 [as 别名]
-
from 包名 import *
相当于import 包名[.模块名 [as 别名]]
案例:将上面案例中的cal .py
文件放到utils
包中管理,logger.py
放到logger
包中管理。
模块
模块介绍
模块是组织代码的更高级形式,大大提高了代码的阅读性和可维护性。
模块一共3种:
-
解释器内建模块
-
第三方模块
-
应用程序自定义模块
另外,使用模块还可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。
模块导入
导入模块时会执行模块,多次导入只执行一次。
案例:
注意:执行源文件的名字一定不要和模块的名字同名
全局导入和部分导入
__name__
__name__
是python内置变量,存储的是当前模块名称。
对于很多编程语言来说,程序都必须要有一个入口。像C,C++都有一个main函数作为程序的入口,而Python作为解释性脚本语言,没有一个统一的入口,因为Python程序运行时是从模块顶行开始,逐行进行翻译执行,所以,最顶层(没有被缩进)的代码都会被执行,所以Python中并不需要一个统一的main()作为程序的入口。
在刚才的案例中三个模块都打印一次__name__
结果为:
通过结果发现__name__
只有在执行模块中打印__main__
,在其他导入模块中打印各自模块的名称。
所以,__name__
可以有以下作用:
1.利用__name__=="__main__"
声明程序入口。
2.可以对导入的模块进行功能测试
main.py
cal.py
logger.py
常见模块
time模块
小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
random模块(了解)
os模块(了解)
os模块是与操作系统交互的一个接口
序列化和反序列化模块:json(重点)
json格式的数据本质上属于字符串类型的数据。但字符串类型的数据很难去解析其中的局部内容。即使用正则也很难取出。这时就要用序列化和反序列化来取。
序列化: 将python中的字典、列表对象转换成指定形式字符串(json格式),然后再写入到文件中(可以将字典、列表对象保存到文件中进行持久化存储),序列化的意义是把对象往文件里存储。dump转存
反序列化:将指定格式的字符串(json格式)转换成字典,列表对象(可以将文件中存储的字符串数据,读取成字典或列表对象)。可以选择获取内容。反序列化的意义是把json字符串转换为Python对象(字典格式)让python可以处理。load载入
做数据解析的时候要用到序列化和反序列化。
-
基本使用
-
序列化:dumps和dump
反序列化:loads和load,用load比较方便,loads多一步操作。选择获取内容。
正则模块
-
什么是正则表达式?
-
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(例如,*,+,?等)。
-
正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。
-
分组: (ab) 。分组没有讲,比较复杂,记住括号就行了,表示只取括号里面的内容,如(ab)表示只取ab。
-
-
常用的正则标识
正则在python中的使用
-
基于re模块进行正则匹配操作
-
主要使用re模块中的findall进行指定规则的匹配
-
findall(str,rule)
-
str表示即将进行匹配的原始字符串数据
-
rule表示指定规则的正则表达式
-
findall返回的是列表,列表中存储匹配到的指定内容
-
-
-
练习