-
有参装饰器:在无参装饰器外加一层参数函数,函数名是装饰器名
def 装饰器名(装饰器参数列表):
def wrapper(fn):
def test(args,*kwargs):
re = fn(args,*kwargs)
新功能代码
return test
return wrapper
@装饰器名(装饰器参数列表)
-
生成器:本质是迭代器中的一种,生成器作为容器它保存的不是数据,而是产生数据的算法
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(生成器)
-
模块: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,运行完后又变回文件名
-
包:包含init.py文件的文件夹
init.py文件内:
a. 可以导入这个包中相关的模块,
b. 还可以给包中模块或者变量名创建快捷方式
c. 封装一些通用性函数等
-
hashlib:是Python通过hash算法进行加密(产生摘要)的一个库;哈希又叫离散算法,主要包含md5、sha两类算法
1)哈希算法加密特点:
a. 密文(摘要)不可逆;
b. 相同数据通过同一种算法加密,密文一致;
c. 不同长度的数据通过同一种算法加密,密文长度一致
2)产生数据摘要(加密):
a. 创建hashlib的对象:hashlib.算法名()
b. 添加需要产生摘要的数据:哈希对象.update(数据.encode()),数据为二进制数据
c. 生成摘要密文:哈希对象.hexdigest()
2019-11-19-Python生成器、模块与哈希
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...