生成器
可以视作一种数据类型,这种数据自动实现了迭代器协议(其他数据类型需要去调用自己的内置函数__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__())