模块初始
模块初始
模块
- 定义:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。简单点说:一个py文件就是一个模块。
- 分类:
- 内置模块:python解释器自带的。
- 自定义模块:自己写的模块
- 拓展模块:别人写的,安装后可以使用的
- 导入条件:
- 模块名必须符合变量名规范;
- 模块所在的位置必须在sys.path模块搜索路径里。
- 导入步骤:
- 导入一个模块的时候,首先创建一个属于自己的内存空间。
- 加载模块中的所有代码;
- 将模块中的所有变量和方法存入命名空间里。
- 模块导入顺序
- 先内置模块,其次扩展模块,最后自定义模块。
- 模块导入的命名空间
- 导入的名字属于全局空间,但是依然指向模块的名字所在的内存空间。
- 导入的名字如果是函数或者方法,引用了全局变量。
- 导入的名字跟全局变量中的名字不冲突。类似于重新赋值
- 尽管导入的名字属于全局变量,但是引用变量取值时仍然从模块中取值。
- import* 默认会把所有模块中所有的名字都导入到去全局。可以在模块中用__all__ = [ "a","b"]控制导入项
- From......import......
- 对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式.
- 而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的全局名称空间中,在当前名称空间中,直接使用名字就可以了。
- import导入的变量或者方法虽然都属于导入文件的全局命名空间,但是函数方法需要变量时还是从原模块调用。
#my_module.py print('from the my_module.py') money=1000 def read1(): print('my_module->read1->money',money) def read2(): print('my_module->read2 calling read1') read1() def change(): global money money=0
#测试一:导入的函数read1,执行时仍然回到my_module.py中寻找全局变量money #demo.py from my_module import read1 money=1000 read1() ''' 执行结果: from the my_module.py spam->read1->money 1000 ''' #测试二:导入的函数read2,执行时需要调用read1(),仍然回到my_module.py中找read1() #demo.py from my_module import read2 def read1(): print('==========') read2() ''' 执行结果: from the my_module.py my_module->read2 calling read1 my_module->read1->money 1000 '''
-
- 需要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系,如下。
from my_module import money,read1 money=100 #将当前位置的名字money绑定到了100 print(money) #打印当前的名字 read1() #读取my_module.py中的名字money,仍然为1000 ''' from the my_module.py 100 my_module->read1->money 1000 '''
- 把模块当做脚本运行
- 模块和脚本的差别:
- 一个py文件被导入另一个py文件,对其提供功能,就是一个模块。
- 一个py文件直接被执行,就是一个脚本。
- 方式:我们可以通过模块的全局变量__name__来查看模块名:
- 模块和脚本的差别:
当做脚本运行:
__name__ 等于'__main__'
当做模块导入:
__name__= 模块名
-
- 作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':
-
-
序列化模块
-
什么是序列化:将原本的字典、列表转化为字符串的过程就叫做序列化。
-
序列化的作用:
-
以某种存储形式使自定义对象更持久化。
-
方便对象的传输。能在文件中存储的一定是字符串或者字节,能在网络中传输的一定是字节。
-
使程序更具维护性。
-
-
-
- python中的序列化模块
- json:json是一种所有的语言都可以识别通用的数据结构。但支持的类型比较有限,数字、列表、字典、字符串。如果序列化的是字典或者列表。首推json。
- pickle:只能在Python程序中传递数据用,支持Python的所有数据类型
- shelve:Python3.x之后才有。

-
-
hashlib模块
-
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。
什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制的字符串表示)。
摘要算法就是通过摘要函数f()对任意长度的数据data计算出固定长度的摘要digest,目的是为了发现原始数据是否被人篡改过。
摘要算法是将字符串转化为长度固定的数字,不同的字符串数字一定不同,相同的字符串无论何时何地都是相同的数字,另外摘要算法是不可逆算法。
- 用法:
- 密文验证的时候加密
- 检查文件一致性的
-
-
-
-
-
-
-
密文验证的时候
-
MD5算法:最通用的算法
- sha算法:安全系数更高的算法,sha算法有很多种,后面的数字越大安全系数越高,得到的数字越长,计算的时间越长。
-
-
MD5算法使用步骤(一定要将内容字符串转换为字节类型):
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
导入hashlib模块
-
创建一个MD5的对象。
-
对象 = update(“内容”.encode("utf-8"))
-
对象.hexdigest()
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
MD5加盐
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 在创建MD5对象的时候,传入盐值,例如:md5=hashlib.md5(“XXX”.encode(“utf-8”))
-
MD5动态加盐
- 在创建MD5对象的时候,传入动态变量盐值。
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- sha1算法使用步骤(跟MD5使用方法相同)
-
-
-
-
-
-
-
-
-
-
- 备注:一段字符串直接进行摘要和分成几段摘要的结果是相同的。
- 备注:一段字符串直接进行摘要和分成几段摘要的结果是相同的。
-
-
-
-
-
-
-
- 检查文件一致性
-
-
-
浙公网安备 33010602011771号