生成器
1.生成器是 python用自己的代码写的迭代器,其本质是迭代器。
2.构建生成器的两种方法
1.生成器函数。
def num(x):
s = x*x
s1 = x + 1
print(666)
yield s
print(777)
yield s1
print(num(3))
num1 = num(3)
print(next(num1))
print(next(num1))
3.生成器vs迭代器
1.自制的区别:
def num(x):
s = x*x
s1 = x + 1
print(466)
yield s
print(217)
yield s1
print(num(3))
num1 = num(3)
print(next(num1))
print(next(num1))
l = [1,2,3,4,5] l1 = iter(l)
2.内存级别的区别:
迭代器需要对可迭代对象进行转化,可迭代对象数据量大时非常占用内存
生成器直接转创建,不需要转化,从本质上节省内存
num1 = num(100000000000)
for a in range(1,101):
print(next(num1))
for a in range(1,101):
print(next(num1))
4.send 与next
send 与next 一样都是生成器取值(执行一个yield)的方法
send可以给上一个yield传值
第一次取值永远都是next
send取不到最后一个yield值
def fun():
count = yield 1
print(count)
count1 = yield 11
print(count1)
yield 111
g = fun()
next(g)
# g.send('45')
g.send('2')
g.send('22')
5.列表推导式,一行代码基本能满足生成常用的列表
一行解决,非常方便
不容易排错,循环次数不能超过三次
复杂的列表,不能用列表推导式生成不要勉强使用
l = (i for i in range(100) if i % 2 == 0) print(l)

浙公网安备 33010602011771号