一、迭送器

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笔记(六)迭送器和生成器相关推荐

  1. python高级学习笔记Day04--01 上下文管理器,生成器,深拷贝,浅拷贝,正则表达式

    with语句 简单又安全 with open('1.txt','w') as f: f.write('hello,world') 上下文管理器 with语句之所以这么强大,背后是由上下文管理器做支撑的 ...

  2. python之路6-迭代器、生成器、装饰器

    1.迭代器&生成器 列表生成式 现在有个需求,列表[1,2,3,4,5,6,7,,8,9],要求把列表里的每个值加1,如何实现? 方法一: list = [1,2,3,4,5,6,7,8,9] ...

  3. python 二——函数、装饰器、生成器、面向对象编程(初级)

    本节内容 1.函数 2.装饰器 3.生成器 4.类 一.函数 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强... ...

  4. Python笔记-内置装饰器

    内置装饰器是指python中自己带的,不要程序员写的 如下代码: class Student(object):def __init__(self, name, score):self.name = n ...

  5. Python笔记六、文件和数据格式化

    一. 文件的操作 fname = input("请输入要打开的文件:") fo = open(fname,"r") print(fo.readlines()) ...

  6. python笔记: 生成器

    元素按照某种算法推算出来,我们在循环的过程中不断推算出后续的元素 不必创建完整的list,从而节省了大量的空间 这种一边循环一遍计算的机制,称之为生成器generator 1 列表生成器 把列表生成式 ...

  7. Python基础(八)--迭代,生成器,装饰器与元类

    目录 Python基础(八)--迭代,生成器,装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2. ...

  8. Python 学习笔记9(装饰器,decorator)

    Python 学习笔记9(装饰器,decorator) 31 装饰器 装饰器可以对一个函数.方法或者类进行加工,是一种高级的python语法. 装饰函数 接收一个可调用对象作为输入参数,并返回一个新的 ...

  9. 初学者python笔记(装饰器后篇:登陆验证)

    装饰器有非常强大的功能,可以不修改函数源代码和调用方式,就给函数加上了对应想要的功能,简直就是 修饰函数的利器. 上一篇文章:初学者python笔记(装饰器.高阶函数.闭包)已经非常详细的剖析了装饰器 ...

最新文章

  1. sdn主要包含哪些接口_SDN 是什么?
  2. 一个切割PDF文件的简单的方法 -只需要chrome浏览器
  3. 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?
  4. oracle expdp/impdp exclude=STATISTICS
  5. telnet 功能启用并测试端口是否正常
  6. Windows Embedded Standard 7 剪裁随笔
  7. FileZilla Client 3.26.1 发布,FTP 解决方案
  8. 下载laravel框架
  9. dell-xps-8930 台式机双硬盘 双系统安装 win10+Ubuntu
  10. scjp java程序员_Sun认证Java程序员(SCJP)考试
  11. 华为认证云计算考什么?
  12. 电脑怎么装linux系统
  13. 18.10.20日报
  14. php查询更新数据库数据类型,更新Update
  15. 漫画:细思极恐,生男女几率相同,那为什么很多国家男女比例还失衡呢?
  16. 中国女式西装行业发展前景预测及数据专项调研报告2022年版
  17. 互联网因特网计算机网络的区别,因特网和互联网的区别?
  18. 透明LED显示屏:透明世界中的无限可能
  19. 2020年低压电工报名考试及低压电工复审模拟考试
  20. 001_A private conversation

热门文章

  1. 【AUTOSAR】BMS开发实际项目讲解(三十)----电池管理系统电池SOH和SOE估算
  2. [附源码]Python计算机毕业设计Django健康医疗体检
  3. Unity 2d 雷区与小怪的生成
  4. 在大数据世界里打小怪之Hive的常用函数
  5. 纷享销客获评“2021-2022年度中国企业服务最佳新经济企业TOP10”
  6. paho mqtt java_MQTT之Eclipse.Paho源码(一)--建立连接
  7. mysql gtid复制优缺点_MySQL GTID复制
  8. 介绍MenuDrawer这个牛x的控件,实现左右出菜单,上下出菜单
  9. mysql分区表_MySQL分区分表
  10. ROP_Emporium_split