python笔记(六)迭送器和生成器
一、迭送器
1.1可迭代协议(iteradle)
可迭代协议可以被迭代要满足的要求就叫做可迭代协议
可迭代协议的定义:内部实现了__iter__方法,可以实现_iter_的内置方法的都是可迭代对象
可以被for循环的对象都是可迭代的对象
迭代是一个重复的过程,每次重复即一次迭代,并且每次迭代的结果都是下一次迭代的初始值
1.2迭代器(iterator)
迭代器遵循迭代器协议:必须拥有__iter__方法和__next__方法
优点: - 提供一种统一的、不依赖于索引的迭代方式 - 惰性计算,节省内存
缺点: - 无法获取长度(只有在next完毕才知道到底有几个值) - 一次性的,只能往后走,不能往前退,执行到最后一个元素后,会报错
二、生成器(Generator)
生成器定义
1.生成器函数:常规函数定义,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行
2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表
3.本质:生成器的本质为迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现)
4.特点:惰性运算,开发者自定义
生成器的优点
1.延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用
2.提高代码可读性
生成器表达式
1 g=('%s' %i for i in range(10)) 2 for i in g: 3 print(i)
yield from
1 def gen1(): 2 for c in 'AB': 3 yield c 4 for i in range(3): 5 yield i 6 7 print(list(gen1())) 8 9 def gen2(): 10 yield from 'AB' 11 yield from range(3) 12 13 print(list(gen2())) 14 # 两个函数执行的结果是一样的
send
1 def generator(): 2 print(123) 3 content = yield 1 4 print('=======',content) 5 print(456) 6 yield 2 7 8 g = generator() 9 ret = g.__next__() 10 print('***',ret) 11 ret = g.send('hello') #send的效果和next一样 12 print('***',ret) 13 14 #send 获取下一个值的效果和next基本一致 15 #只是在获取下一个值的时候,给上一yield的位置传递一个数据 16 #使用send的注意事项 17 # 第一次使用生成器的时候 是用next获取下一个值 18 # 最后一个yield不能接受外部的值
三、推导式
1 #列表推导式 2 g=[i for i in range(10)] 3 print(g) 4 #与生成器表达式的区别为:生成器用(),列表用[]
遍历之后挨个处理:[每一个元素或者是和元素相关的操作 for 元素 in 可迭代数据类型]
筛选功能:[满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件]
例子:所有能被3整除的数
1 ret = [i for i in range(30) if i%3 == 0] #完整的列表推导式 2 print(ret)
转载于:https://www.cnblogs.com/zxq520921/p/9430632.html
python笔记(六)迭送器和生成器相关推荐
- python高级学习笔记Day04--01 上下文管理器,生成器,深拷贝,浅拷贝,正则表达式
with语句 简单又安全 with open('1.txt','w') as f: f.write('hello,world') 上下文管理器 with语句之所以这么强大,背后是由上下文管理器做支撑的 ...
- python之路6-迭代器、生成器、装饰器
1.迭代器&生成器 列表生成式 现在有个需求,列表[1,2,3,4,5,6,7,,8,9],要求把列表里的每个值加1,如何实现? 方法一: list = [1,2,3,4,5,6,7,8,9] ...
- python 二——函数、装饰器、生成器、面向对象编程(初级)
本节内容 1.函数 2.装饰器 3.生成器 4.类 一.函数 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强... ...
- Python笔记-内置装饰器
内置装饰器是指python中自己带的,不要程序员写的 如下代码: class Student(object):def __init__(self, name, score):self.name = n ...
- Python笔记六、文件和数据格式化
一. 文件的操作 fname = input("请输入要打开的文件:") fo = open(fname,"r") print(fo.readlines()) ...
- python笔记: 生成器
元素按照某种算法推算出来,我们在循环的过程中不断推算出后续的元素 不必创建完整的list,从而节省了大量的空间 这种一边循环一遍计算的机制,称之为生成器generator 1 列表生成器 把列表生成式 ...
- Python基础(八)--迭代,生成器,装饰器与元类
目录 Python基础(八)--迭代,生成器,装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2. ...
- Python 学习笔记9(装饰器,decorator)
Python 学习笔记9(装饰器,decorator) 31 装饰器 装饰器可以对一个函数.方法或者类进行加工,是一种高级的python语法. 装饰函数 接收一个可调用对象作为输入参数,并返回一个新的 ...
- 初学者python笔记(装饰器后篇:登陆验证)
装饰器有非常强大的功能,可以不修改函数源代码和调用方式,就给函数加上了对应想要的功能,简直就是 修饰函数的利器. 上一篇文章:初学者python笔记(装饰器.高阶函数.闭包)已经非常详细的剖析了装饰器 ...
最新文章
- sdn主要包含哪些接口_SDN 是什么?
- 一个切割PDF文件的简单的方法 -只需要chrome浏览器
- 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?
- oracle expdp/impdp exclude=STATISTICS
- telnet 功能启用并测试端口是否正常
- Windows Embedded Standard 7 剪裁随笔
- FileZilla Client 3.26.1 发布,FTP 解决方案
- 下载laravel框架
- dell-xps-8930 台式机双硬盘 双系统安装 win10+Ubuntu
- scjp java程序员_Sun认证Java程序员(SCJP)考试
- 华为认证云计算考什么?
- 电脑怎么装linux系统
- 18.10.20日报
- php查询更新数据库数据类型,更新Update
- 漫画:细思极恐,生男女几率相同,那为什么很多国家男女比例还失衡呢?
- 中国女式西装行业发展前景预测及数据专项调研报告2022年版
- 互联网因特网计算机网络的区别,因特网和互联网的区别?
- 透明LED显示屏:透明世界中的无限可能
- 2020年低压电工报名考试及低压电工复审模拟考试
- 001_A private conversation
热门文章
- 【AUTOSAR】BMS开发实际项目讲解(三十)----电池管理系统电池SOH和SOE估算
- [附源码]Python计算机毕业设计Django健康医疗体检
- Unity 2d 雷区与小怪的生成
- 在大数据世界里打小怪之Hive的常用函数
- 纷享销客获评“2021-2022年度中国企业服务最佳新经济企业TOP10”
- paho mqtt java_MQTT之Eclipse.Paho源码(一)--建立连接
- mysql gtid复制优缺点_MySQL GTID复制
- 介绍MenuDrawer这个牛x的控件,实现左右出菜单,上下出菜单
- mysql分区表_MySQL分区分表
- ROP_Emporium_split