python生成器


生成器
可以视作一种数据类型,这种数据自动实现了迭代器协议(其他数据类型需要去调用自己的内置函数__iter__()生成可迭代对象),视为可迭代对象
生成器的表现形式:
1)生成器函数:常规函数定义,但是使用yield语句而不是return语句2
2)生成器表达式:类似于列表推导,但是,生成器
三元表达式

示例
 1 # eg.1
 2 def test():
 3     yield 1
 4     yield 2
 5     yield 3
 6 
 7 
 8 # eg.2 三元表达式
 9 name = "alex"
10 res = "SB" if name == "alex" else "linda"
11 
12 # eg.3  列表解析
13 egg_list = ["第%s号蛋" % i for i in range(10)]
14 print(egg_list)
15 egg_list1 = ["第%s号蛋" % i for i in range(10) if i > 5]
16 print(egg_list1)
17 # egg_list1 = ["第%s号蛋" %i for i in range(10) if i > 5 else i] 没有四元表达式
18 
19 # eg.4
20 hen = ("第%s号蛋" % i for i in range(10))
21 print(hen)
22 print(hen.__next__())
23 print(hen.__next__())
24 
25 # eg. 5
26 li = [1, 2, 3, 4, 5]
27 print(sum(li))  # sum也基于iterable协议计算
28 print(sum(i for i in range(1000)))  # 生成器表达式
29 
30 
31 # eg.6 生成器函数
32 def generator_test():
33     for i in range(100):
34         yield i
35 
36 
37 res = generator_test()
38 print(res)
39 print(res.__next__())
40 print(res.__next__())