生成器
Posted wxl1025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器相关的知识,希望对你有一定的参考价值。
1.生成器
1.生成器本质就是迭代器,Python社区生成器与迭代器是相同的
唯一区别:生成器是我们用Python代码构建的
2.生成器产生方式
- 生成器函数
- 生成器表达式
- 一些内置函数返回一个生成器
3.生成器函数
只要函数中出现了yield那么它就是生成器函数
def func():
print(111)
yield 2
print(111)
yield 3
print(111)
yield
print(111)
yield 5
ret = func() # 生成器对象
print(ret) # <generator object func at 0x0000000001E10F68>
print(next(ret)) #一个next对应一个yield
4.yield与return的区别
return 结束函数,给函数的执行者返回值
yield 不结束函数,对应着给next返回值
#多个值皆通过元祖的形式返回
5.生成器举例
def eat_baozi_gen():
for i in range(1,2001):
yield f'i号包子'
ret1 = eat_baozi_gen()
print(next(ret1))
print(next(ret1))
...
for i in range(200):
print(next(ret))
for i in range(200):
print(next(ret))
6.yield from
将一个可迭代对象的每一个元素返回给next
节省代码,提升效率(代替了for循环)
def func():
l1 = [1, 2, 3]
yield l1
ret = func()
print(next(ret))
print(next(ret))
print(next(ret))
7.列表推导式
l1 = []
for i in range(1,101):
l1.append(i)
print(l1)
列表推导式:一行代码构建一个有规律比较复杂的列表
l1 = [i for i in range(1, 101)]
print(l1)
构建方式:
1.循环模式:[变量(加工后的变量) for 变量 in iterable]
将10以内所有整数的平方写入列表
print([i**2 for i in range(1, 11)])
100以内所有的偶数写入列表
print([i for i in range(2, 101, 2)])
从python1期到python100期写入列表
print([f'pythoni期' for i in range(1, 101)])
2.筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
三十以内可以被三整除的数。
print([i for i in range(1, 31) if i % 3 == 0])
优点:简单快捷
缺点:可读性不高,不好排错
8.生成器表达式
与列表推导式相近 => 循环模式,筛选模式
obj = (i for i in range(5))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
print(next(obj))
如何触发生成器(迭代器)取值
1.next(obj)
2.for循环
for i in obj:
print(i)
3.数据转化
print(list(obj))
生成器节省内存
9.字典,集合推导式
与列表推导式相近 => 循环模式,筛选模式
集合推导式
print(i for i in range(1, 101))
字典推导式
0: '小潘', 1: '怼怼哥', 2: '西门大官人'
li = ['小潘', '蔡徐坤','西门大官人']
dic =
for index in range(len(li)):
dic[index] = li[index]
print(dic)
print(i:l1[i] for i in range(len(li)))
以上是关于生成器的主要内容,如果未能解决你的问题,请参考以下文章