本节主要内容:
1. ⽣生成器和⽣生成器函数
2. 列列表推导式
⼀、生成器
1. 通过⽣生成器函数
2. 通过各种推导式来实现⽣生成器
3. 通过数据的转换也可以获取⽣生成器
send和__next__()区别:
1. send和next()都是让⽣生成器向下走⼀一次
2. send可以给上⼀一个yield的位置传递值, 不能给后⼀一个yield发送值. 在第⼀一次执⾏行行⽣生
成器代码的时候不能使⽤用send()
生成器可以使⽤for循环来循环获取内部的元素:
⽣生成器可以使⽤用for循环来循环获取内部的元素
def func():
print(111)
yield 222
print(333)
yield 444
print(555)
yield 666
gen = func() f
or i in gen:
print(i) 结果: 111 222 333 444 555 666
二. 列列表推导式, ⽣生成器表达式以及其他推导式
lst = [] for i in range(1, 15): lst.append(i) print(lst)
替换成列列表推导式:
lst = [i for i in range(1, 15)] print(lst)
列列表推导式的常⽤用写法:
[ 结果 for 变量量 in 可迭代对象 if 条件 ]
后⼀一个知识点: yield from 在python3中提供了了⼀一种可以直接把可迭代对象中的每⼀一个数据作为⽣生成器的结果进⾏行行返回
def gen(): l
st = ["⿇花藤", "胡辣汤", "微星牌饼铛", "Mac牌锅铲"]
yield from lst
g = gen()
for el in g:
print(el)
⼩小坑: yield from是将列列表中的每⼀一个元素返回. 所以. 如果写两个yield from 并不会产⽣生交替 的效果.
def gen(): lst = ["⿇花藤", "胡辣汤", "微星牌饼铛", "Mac牌锅铲"]
lst2 = ["饼铛还是微星的好", "联想不能煮鸡蛋", "微星就可以", "还可以烙饼"]
yield from lst
yield from lst2
g = gen()
for el in g:
print(el)