Wait for bloom
时光不语,静待花开

1.生成器优势

  • 节省空间:生成器按需生成值,避免了一次性加载所有数据到内存中。这对于处理大型数据集尤其重要。
  • 惰性计算:生成器支持惰性计算,只有在需要时才计算值。这在处理无限序列或需要动态生成数据的场景中非常有用。
  • 一次性使用:生成器通常是一次性的,一旦遍历完毕,就需要重新创建生成器对象。

2.案例

  • 斐波拉契(1,1,2,3,5,8.。。。)
 1 #!/usr/bin/python
 2 def feibo(n):
 3     '''1 1 2 3 5 8....'''
 4     a,b=0,1
 5     for i in range(n):
 6         yield b
 7         a,b=b,a+b
 8 
 9 f=feibo(10)
10 # print(f.__next__())
11 # print(f.__next__())
12 # print(f.__next__())
13 # print(f.__next__())
14 # print(f.__next__())
15 # print(f.__next__())
16 # print(f.__next__())
17 # print(f.__next__())
18 # print(f.__next__())
19 # print(f.__next__())
20 # print(f.__next__())
21 # print(f.__next__())
22 # StopIteration
23 for i in f:
24     print(i)
View Code
  • 并行
 1 #!/usr/bin/python
 2 #生成器
 3 
 4 def cusumer(name):
 5     """定义消费者进店等着消费"""
 6     print('%s进店了等着吃饺子了'%name)
 7     while True:
 8         count_dumpling =yield #新增了个参数count_dumpling,需要被传进来
 9         print('%s吃了%s个饺子'%(name,count_dumpling))
10 
11 def productor():
12     """生产者生产流程"""
13     c1 =cusumer('小张')
14     c2 =cusumer('小李')
15     c1.__next__()   #需要调用
16     c2.__next__()   #需要调用
17     for i in range(10):
18         print('饺子来了')
19         c1.send(i+1)                  #对应cosumer里面的while true
20         print('饺子来了')
21         c2.send(i+1)
22 productor()
View Code
posted on 2024-01-25 18:41  Little-Girl  阅读(17)  评论(0)    收藏  举报