2019-11-19-Python生成器、模块与哈希

  1. 有参装饰器:在无参装饰器外加一层参数函数,函数名是装饰器名

    def 装饰器名(装饰器参数列表):

    ​ def wrapper(fn):

    ​ def test(args,*kwargs):

    ​ re = fn(args,*kwargs)

    ​ 新功能代码

    ​ return test

    ​ return wrapper

    @装饰器名(装饰器参数列表)

  2. 生成器:本质是迭代器中的一种,生成器作为容器它保存的不是数据,而是产生数据的算法

    1)创建生成器:调用带有‘yield’关键字的函数,就可以得到一个生成器

    2)函数中只要有yield,调用函数都不会执行函数体,并且得到的是一个生成器对象

    3)产生数据:生成器能够产生多少数据与数据类型,看执行完生成器关联的函数体遇到几次yield,遇到几次就产生多少数据;每次遇到yield,yield后面的数据就是对应的元素

    4)产生数据的规律:遇见yield暂停,并返回yield后面的值;继续获取数据,从上一次yield之后暂停开始到下一个yield暂停,并返回yield后面的值;到函数结束如果没有遇到yield会报错(stopIteration)

    5)生成式:本质是生成器;写法更加简洁

    ​ a. 生成器 = (表达式 for 变量 in 序列)

    ​ b. 生成器 = (表达式 for 变量 in 序列 if 条件语句)

    ​ c. 生成器 = (表达式 for 变量1 in 序列1 for 变量2 in 序列2),双重循环

    6)列表生成式:将生成式中语法()变成[ ] ---> [表达式 for 变量 in 序列] == list(生成器)

  3. 模块:Python中一个py文件就是一个模块

    1)导入模块:导入代码应放在文件开头

    ​ a. import 模块名:可使用模块中所有的全局变量;‘模块名.变量’名方式调用

    ​ b. from 模块名 import 变量名1,变量名2...:可使用import后指定的全局变量,直接使用变量名

    ​ c. from 模块名 import *:导入模块中所有的全局变量,直接使用变量名

    ​ d. import 模块名 as 新模块名:对模块进行重命名,新模块名仅适用于本模块内有效

    ​ e. from 模块名 import 变量名1 as 新变量名1,变量名2 as 新变量名2...

    2)阻止导入:写入if __ name __ == '__ main __':内的代码语句,在被导入时不会执行,只会在本模块执行;

    ​ 原理:在创建模块时,系统自动给模块添加属性:__ name__,来保存当前模块的名字;name属性的值默认是当前文件的文件名,当直接运行当前模块时,模块的name会变成main,运行完后又变回文件名

  4. 包:包含init.py文件的文件夹

    init.py文件内:

    ​ a. 可以导入这个包中相关的模块,

    ​ b. 还可以给包中模块或者变量名创建快捷方式

    ​ c. 封装一些通用性函数等

  5. hashlib:是Python通过hash算法进行加密(产生摘要)的一个库;哈希又叫离散算法,主要包含md5、sha两类算法

    1)哈希算法加密特点:

    ​ a. 密文(摘要)不可逆;

    ​ b. 相同数据通过同一种算法加密,密文一致;

    ​ c. 不同长度的数据通过同一种算法加密,密文长度一致

    2)产生数据摘要(加密):

    ​ a. 创建hashlib的对象:hashlib.算法名()

    ​ b. 添加需要产生摘要的数据:哈希对象.update(数据.encode()),数据为二进制数据

    ​ c. 生成摘要密文:哈希对象.hexdigest()

你可能感兴趣的:(2019-11-19-Python生成器、模块与哈希)