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

一、迭代器

迭代器 适合遍历一些巨大或无限的集合,如几个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

第 4 天 迭代器、生成器、装饰器、正则表达式的相关文章

Python 迭代器&amp;生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发

本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式,运算后得出结果,结果必须与真实的计算器所得出的结果一致 迭代器&

python 迭代器 生成器 装饰器

迭代器 可以直接作用于for循环的对象统称为可迭代对象(Iterable). 可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator). 所有的Iterable均可以通过内置函数iter()来转变为Iterator. names = iter(['sun', 'ibm', 'sunny']) print(names) print(names.__next__()) print(names.__next__()) print(names.__next__()) print(

python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: 1 >>> g = (x * x for xin range(10)) 2 >>> g3 <generator object <genexpr> at 0x1022ef630> 此处g就是一个生成器. 迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是gene

迭代器/生成器/装饰器

迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和next()方法.其中__iter__()方法返回迭代器对象本身:next()方法返回容器的下一个元素,在结尾时引发StopIteration异常 可迭代对象 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration),默认的list.tuple.stri.dict对象都是可以迭代的. isinstance(obj

Python 全栈开发五 迭代器 生成器 装饰器

一.迭代器 迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器有两个基本的方法:iter() 和 next(). 字符串,列表或元组对象都可用于创建迭代器,生成迭代器的方法是iter(): >>li = [1,2,3,4,5] >>it = iter(li) #生成一个迭代器 >>it.__next__() 1 >>next(it) #以上两种next都可以使用 2 >

迭代器,生成器,装饰器,递归

迭代器 可迭代对象 1)定义:在python中,但凡内部含有--itter--方法的对象,都是可迭代对象 可以通过dir()去判断一个对象具有什么方法 dir()会返回一个列表,这个列表中含有该对象的以字符串形式的所有方法 从字面意思来说:可迭代对象就是一个可以重复取值的数据集. 从专业角度来说:但凡内部含有iter方法的对象,都是可迭代对象 . 可迭代对象可以通过判断该对象是否有’iter’方法来判断. 可迭代对象的优点: 可以直观的查看里面的数据.操作方法多,灵活 可迭代对象的缺点: 1.占

Day4 - Python基础4 迭代器、装饰器、软件开发规范

Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需求,看列表[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],我要求你把列表里的每个值加1,你怎么实现?你可能会想到2种方式 >>> a [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>

Python_Day5_迭代器、装饰器、软件开发规范

本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 1.列表生成式,迭代器&生成器 列表生成 >>> a = [i+1 for i in range(10)] >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 生成器 通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的.而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访

Python(四)装饰器、迭代器&生成器、re正则表达式、字符串格式化

本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########## def orter(func):    #定义装饰器     de

Python装饰器、迭代器&amp;生成器、re正则表达式、字符串格式化

Python装饰器.迭代器&生成器.re正则表达式.字符串格式化 本章内容: 装饰器 迭代器 & 生成器 re 正则表达式 字符串格式化 装饰器 装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 先定义一个基本的装饰器: ########## 基本装饰器 ########