码迷,mamicode.com
首页 > 其他好文 > 详细

第 4 天 迭代器、生成器、装饰器、正则表达式

时间:2016-02-09 17:47:27      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

一、迭代器

迭代器 适合遍历一些巨大或无限的集合,如几个G的文件!

迭代器的特点:

1、访问者不用关心迭代器的内部结构,仅需要通过next()方法不断地去取下一个内容!
2、不能随机访问集合中的,某个值,只能从头到尾访问!
3、访问到一半时不能往回退!
4、便于循环比较大的数据集合,节省了内存!
 1 >>> name = iter([jiac,piter,kuga]) ##创建一个迭代器
 2 >>> name.__next__()
 3 jiac
 4 >>> name.__next__()
 5 piter
 6 >>> name.__next__()
 7 kuga
 8 >>> name.__next__()##当遍历完集合中的元素后!
 9 Traceback (most recent call last):
10   File "<stdin>", line 1, in <module>
11 StopIteration
12 >>>

 

二、生成器

一个函数被调用时返回一个迭代器,那这个函数就叫生成器(generator);
如果函数中包含yield语法,那这个函数就会变成生成器!
 1  生成器cash_miney                                      
 2  def cash_money(arg):                                  
 3      while arg > 0:                                    
 4          arg -= 100                                    
 5          yield 100                                     
 6          print("来要钱了!")                           
 7                                                        
 8  a = cash_money(500)                                   
 9  print(type(a))                                        
10 ## 返回迭代器                                          
11 print(a.__next__()) #100                               
12 print(a.__next__()) #100                               
13 print(a.__next__()) #100                               
14 print(a.__next__()) #100                               
15 print(a.__next__()) #100                               
16 print(a.__next__())#执行时报错如下:(迭代完成后)        
17 Traceback (most recent call last):                     
18   File "F:/51python/day4/demo.py", line 16, in <module>
19     print(a.__next__())                                
20 StopIteration                                          

yield实现单线程的异步并发:(串行的程序中实现并行的效果!

 1 #消费者
 2 def consumer(name):
 3     print("%s准备吃包子!"%name)
 4     while True:
 5         b = yield ##接收send()方法的值
 6         print("包子[%s]来了!被[%s]吃了"%(b,name))
 7 
 8 #生产者
 9 def producer(name):
10     c1 = consumer("A")
11     c2 = consumer("B")
12     c1.__next__() ##输出yield的返回值
13     c2.__next__() ##输出yield的返回值
14     print("老子开始准备做包子啦!")
15     for i in range(10):
16         time.sleep(1)
17         print("已经做了2 个包子了!")
18         c1.send(i) ##把i的值发送给yield
19         c2.send(i) ##把i的值发送给yield
20 
21 producer("me")
22 
23 ###打印输出如下:###
24 A准备吃包子!
25 B准备吃包子!
26 老子开始准备做包子啦!
27 已经做了2 个包子了!
28 包子[0]来了!被[A]吃了
29 包子[0]来了!被[B]吃了
30 已经做了2 个包子了!
31 包子[1]来了!被[A]吃了
32 包子[1]来了!被[B]吃了
33 已经做了2 个包子了!
34 包子[2]来了!被[A]吃了
35 包子[2]来了!被[B]吃了
36 已经做了2 个包子了!
37 包子[3]来了!被[A]吃了
38 包子[3]来了!被[B]吃了
39 已经做了2 个包子了!
40 包子[4]来了!被[A]吃了
41 包子[4]来了!被[B]吃了
42 已经做了2 个包子了!
43 包子[5]来了!被[A]吃了
44 包子[5]来了!被[B]吃了
45 已经做了2 个包子了!
46 包子[6]来了!被[A]吃了
47 包子[6]来了!被[B]吃了
48 已经做了2 个包子了!
49 包子[7]来了!被[A]吃了
50 包子[7]来了!被[B]吃了
51 已经做了2 个包子了!
52 包子[8]来了!被[A]吃了
53 包子[8]来了!被[B]吃了
54 已经做了2 个包子了!
55 包子[9]来了!被[A]吃了
56 包子[9]来了!被[B]吃了

 

三、装饰器

 

四、正则表达式

第 4 天 迭代器、生成器、装饰器、正则表达式

标签:

原文地址:http://www.cnblogs.com/zhang252709/p/5185627.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!