一 : 生成器簡述
可以理解為一種數(shù)據(jù)類型,這種數(shù)據(jù)類型自動實現(xiàn)了迭代器協(xié)議 (其他的數(shù)據(jù)類型需要調(diào)用自己的內(nèi)置iter方法),所以生成器就是可迭代對象
二 : 生成器表達形式
( 1 )函數(shù)方式
def test():
yield 1
gen = test()
print(gen)
<generator object test at 0x10724d7c8>
可以yieled多次
def test():
yield 1
yield 2
yield 3
返回值生成器實現(xiàn)了__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)
調(diào)用__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)))