Python篇-生成器( 一 )

一 : 生成器简述

可以理解为一种数据类型,这种数据类型自动实现了迭代器协议 (其他的数据类型需要调用自己的内置iter方法),所以生成器就是可迭代对象

二 : 生成器表达形式

( 1 )函数方式

def test():
    yield 1
gen = test()
print(gen)

可以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__())
 at 0x100ad77c8>
美女6
美女7

( 4 )sum求和 生成器的方式

print(sum(i for i in range(1000)))

你可能感兴趣的:(Python篇-生成器( 一 ))