day20 包的使用

2020-08-03  本文已影响0人  荭鲤鱼与緑鲤鱼与驴

Ⅰ 什么是包?为何要有包?
包是一种通过使用‘.模块名’来组织python模块名称空间的方式。具体的来说包就是一个含由init.py文件的文件夹,所以其实我们创建包的目的就是为了用文件夹将文件/模块组织起来,在python3中,即使包下没有init.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错;创建包的目的不是为了运行,而是被导入使用,记住,包只是模块的一种形式而已,包的本质就是一种模块;包的本质就是一个文件夹,那么文件夹唯一的功能就是将文件组织起来;随着功能越写越多,我们无法将所以功能都放到一个文件中,于是我们使用模块去组织功能,而随着模块越来越多,我们就需要用文件夹将模块文件组织起来,以此来提高程序的结构性和可维护性
Ⅱ 包的使用
关于包相关的导入语句分为import和from...import...两种,但是无论哪种,无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法.可以带有一连串的点,如item.subitem,subsubitem,但都必须遵循这个原则,但对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数类;import导入文件时,产生的名称空间的名字来源于文件,impot包,产生的名称空间的名字同样来源于文件,即包下的init.py,导入包本质就是在导入该文件;包A和包B下有同名模块也不会冲突,如A.a与B.a来自两个命名空间
包的使用之import:我们在单独导入包名称是不会导入包中所有包含的所有子模块,需要将子模块导入到init文件中;包的使用至from...import...需要注意的是导入的模块必须是明确的一个不能带点的,否则回有语法错误;from...import...* 会导入一个自定义模块内所有的名字;绝对导入:类似于绝对路径;相对导入:from . import 一个点的意思是在当前目录导入,两个是在上一级, ../..是在上两级,但是当用..或者../..返回上级去导入的时候,如果到了程序的入口就会报错;也就是说相对导入不能返回到顶层目录去导入,否则会报错,所以,没用绝对导入的人比较多;在需要同级导入时用相对导入的比较多.
Ⅲ json&pickle模块
json可以简单理解为一种通用的数据存储标准格式,如果我们要在不同的变成语言之间传递对象,就必须把对象序列换为标准格式,比如XML,但更好的方法是序列化成JSON,应为JSON表示出来就是一个字符串,可以被所有与语言读取,放可以方便地存储到磁盘或者通过网络传输,JSON不仅是标准格式,并且比XML更快,而且可以直接在web页面中读取,非常方便.
什么是序列化?为什么要序列化?
我们把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
1:持久保存状态
需知一个软件/程序的执行就在处理一系列状态的变化,在编程语言中,'状态'会以各种各样有结构的数据类型(也可简单的理解为变量)的形式被保存在内存中。
内存是无法永久保存数据的,当程序运行了一段时间,我们断电或者重启程序,内存中关于这个程序的之前一段时间的数据(有结构)都被清空了。
在断电或重启程序之前将程序当前内存中所有的数据都保存下来(保存到文件中),以便于下次程序执行能够从文件中载入之前的数据,然后继续执行,这就是序列化。
具体的来说,你玩使命召唤闯到了第13关,你保存游戏状态,关机走人,下次再玩,还能从上次的位置开始继续闯关。或如,虚拟机状态的挂起等。
2:跨平台数据交互
序列化之后,不仅可以把序列化后的内容写入磁盘,还可以通过网络传输到别的机器上,如果收发的双方约定好实用一种序列化的格式,那么便打破了平台/语言差异化带来的限制,实现了跨平台数据交互。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
pickle和其他一样,只是只能用于python
Pickle的问题和所有其他编程语言特有的序列化问题一样,就是它只能用于Python,并且可能不同版本的Python彼此都不兼容,因此,只能用Pickle保存那些不重要的数据,不能成功地反序列化也没关系。
Ⅳ hashlib模块
hashlib模块可以理解成一种算法
1、什么叫hash:hash是一种算法(3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法),该算法接受传入的内容,经过运算得到一串hash值
2、hash值的特点是:
2.1 只要传入的内容一样,得到的hash值必然一样=====>要用明文传输密码文件完整性校验
2.2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码
2.3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的
hash算法就像一座工厂,工厂接收你送来的原材料(可以用m.update()为工厂运送原材料),经过加工返回的产品就是hash值
以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。称之为密码加盐.

上一篇 下一篇

猜你喜欢

热点阅读