python-day12
一. 迭代器
迭代器
__iter__()获取迭代器
__next__()下一个
二. 生成器
本身就是迭代器
两种方法写生成器
1. 生成器函数
2. 生成器表达式
1 #生成器函数,就是把return换成yield
2 # def generator():
3 # print('爽歪歪')
4 # yield '娃哈哈'#可以让我们的函数分段运行
5 # print('酸酸乳')
6 # yield 'AD钙奶'
7 # print('黄焖鸡米饭')
8 # yield
9 #
10 # ret = generator()#不会执行你的函数,获取到生成器对象
11 # print(generator())
12 # print(ret)
13 # print(ret.__next__())
14 # print(ret.__next__())#必须执行__next__()才能触发生成器
15 # print(ret.__next__()) #StopIteration 会打印黄焖鸡米饭 找不到yield会报错
# 生成器表达式
# dic = [1,2,3,4,5,6,7,8,9,0]
# s = (i for i in dic)
# print(s)
三. 生成器函数
函数内部有yield,yield返回 >>>>return
yield可以把函数分段执行
生成器函数被调用的时候. 返回生成器
def func():
yield
g = func() - 得到生成器
生成器的用法和迭代器基本一致
__next__() 开始执行生成器. 执行到yield. 直到没有yield,抛出StopIteration
send() 可以给上一个yield传值
1. 省内存
2. 惰性机制, 不访问__next__() 就没有值
3. 只能向前. 不能反复
四. 各种推导式
列表推导式 [ 结果 for循环 if判断 ]
字典推导式 {key: value for循环 if判断 }
集合推导式 { key for循环 if判断 }
1 # 列表推导式
2 # lst = [ 'python全栈%s期'%i for i in range(1,18) if i%2==1]
3 # print(lst)
4 # 语法:[结果 for循环 if判断]
5
6 # 字典推导式
7 # ls = [11,22,33]
8 # di = {i:ls[i] for i in range(len(ls))}
9 # print(di)
10
11 # 集合推导式
12 # print({i for i in range(10)})
13
14 # 生成器表达式
15 # dic = [1,2,3,4,5,6,7,8,9,0]
16 # s = (i for i in dic)
17 # print(s)
五. 生成器表达式
(结果 for循环 if 判断)
惰性机制, 不访问__next__() 就没有值
只能向前. 不能反复
yield from
1 # def func():
2 # dic = [1,2,3,4]
3 ## yield from dic
4 # yield dic[0]
5 # yield dic[1]
6 # yield dic[2]
7 # yield dic[3]
8 # a= func()