一 : 生成器简述
可以理解为一种数据类型,这种数据类型自动实现了迭代器协议 (其他的数据类型需要调用自己的内置iter方法),所以生成器就是可迭代对象
二 : 生成器表达形式
( 1 )函数方式
def test():
yield 1
gen = test()
print(gen)
<generator object test at 0x10724d7c8>
可以yieled多次
def test():
yield 1
yield 2
yield 3
返回值生成器实现了__next__()
方法
def test():
yield 1
yield 2
yield 3
gen = test()
print(gen.__next__())
print(gen.__next__())
print(gen.__next__())
1
2
3
( 2 )三元表达式与列表解析
- 三元表达式
name = '思思'
res = '可岑' if name == '思思' else '丑'
print(res)
可岑
- 列表解析
我们想在列表中填入一群美女可以下面的方法
my_list = []
for i in range(10):
my_list.append('美女'+str(i))
print(my_list)
['美女0', '美女1', '美女2', '美女3', '美女4', '美女5', '美女6', '美女7', '美女8', '美女9']
变成列表解析的形式为
l = ['美女'+str(i) for i in range(10)]
print(l)
也可以加上判断条件
ll = ['美女'+str(i) for i in range(10) if i > 5]
['美女6', '美女7', '美女8', '美女9']
( 3 )生成式表达式
把列表解析的[]换成()得到的就是生成器表达式
gen = ('美女'+str(i) for i in range(10) if i > 5)
print(gen)
调用__next__()
即可
gen = ('美女'+str(i) for i in range(10) if i > 5)
print(gen)
print(gen.__next__())
print(gen.__next__())
<generator object <genexpr> at 0x100ad77c8>
美女6
美女7
( 4 )sum求和 生成器的方式
print(sum(i for i in range(1000)))
网友评论