一、迭代器
迭代器 适合遍历一些巨大或无限的集合,如几个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]吃了
三、装饰器
四、正则表达式
时间: 2024-12-28 00:54:59