1 '''
2 生成器:
3 概念:使用yield的函数被称为是生成器函数。generator
4 与普通函数区别:生成器函数是一个返回迭代器的函数,
5 只能用于迭代操作。可以认为生成器就是一个迭代器。
6 '''
7 # 系统的生成器
8 li1 = (x for x in range(3)) # [0,1,2]
9 print(li1)
10 print(type(li1)) # generator
11
12 li2 = (x*2 for x in range(4)) # [0, 2, 4, 6]
13 for i in li2:
14 print(i)
15
16 li3 = (3 for x in range(3))
17 print(list(li3))
18
19
20 li4 = (x for x in range(11) if x % 2 == 0)
21 print(list(li4))
22
23 l = []
24 for i in range(11):
25 if i % 2 == 0:
26 l.append(i)
27 print(l)
28
29
30 # 函数
31 def func1():
32 print("--1--")
33 print("--2--")
34 print("--3--")
35 func1()
36 print(type(func1)) # function
37 print(type(func1())) # NoneType
38
39 # 生成器函数
40 def func2():
41 print("***111***")
42 print(3456789)
43 yield
44 print("***222***")
45 yield
46 print("***333***")
47 yield
48 print(type(func2)) # function
49 print(type(func2())) # generator
50 print('----------------------------------------')
51 a = func2()
52 next(a)
53 next(a)
54 next(a)
55 # next(a) # StopIteration
56
57 def func3():
58 print("---111---")
59 yield "a"
60 print("---222---")
61 yield "b"
62 print("---333---")
63 yield
64
65 b = func3()
66 print(next(b))
67 print(next(b))
68 print(next(b)) # None