1.生成器:
生成器的本质就是迭代器
生成器的特点和迭代器是一样的,获取方式和迭代器一样(__next__(), send(): 给上一个yield传值).
生成器一般是由生成器函数或者生成器表达式来创建
其实就是手写迭代器
def func(): print("娃哈哈") yield 1 # return和yield都可以返回数据 print("呵呵呵") gen = func() # 不会执行你的函数. 拿到的是生成器
函数中如果有yield 这个函数就是生成器函数. 生成器函数() 获取的是生成器. 这个时候不执行函数 yield: 相当于return 可以返回数据. 但是yield不会彻底中断函数. 分段执行函数. gen.__next__() 执行函数. 执行到下一个yield. gen.__next__() 继续执行函数到下一个yield.
生成器函数
和普通函数没有区别. 里面有yield的函数就是生成器函数.
生成器函数在执行的时候. 默认不会执行函数体. 返回生成器
通过生成器的__next__()分段执行这个函数.
send() 给上一个yield传值, 不能再开头(没有上一个yield), 最后一个yield也不可以用send()
2.推导式!!!
列表推导式 [结果 for循环 条件筛选]
列表推导式 打出py1-py15期 lst = {"python"+str(j) for j in range(1,15)} print(lst)
字典推导式 {k:v for循环 条件筛选}
[11,22,33,44] => {0:11,1:22,2:33} lst = [11,22,33,44] dic = {i:lst[i] for i in range(len(lst)) if i < 2} # 字典推导式就一行 print(dic) 语法:{k:v for循环 条件筛选}
集合推导式 k for循环 条件}
简单去重 他是一个集合 lst = [1,2,3,1,2,2,3,3,] s = set(lst) print(s) 集合推导式 lst = [1,2,3,1,2,2,3,3,] # s = {el for el in lst} # print(s)
生成器表达式
(结果 for循环 条件)
特点:
1. 惰性机制
2. 只能向前
3. 节省内存(鸡蛋)