一:什么是迭代器协议

  1. 迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代器中的下一项,要么就引起一个stoplteration异常,以终止协议(只能往后走不能往前)
  2. 可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
  3. 协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min函数等)使用迭代器协议访问对象。

二:for循环机制

for循环机制的本质:循环所有对象,全部都是使用迭代器协议。

三:什么是生成器

1. 生成器,可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的_iter_方法),所以生成器就是可迭代对象。

2. 生成器分类:在python中有两种表现形式(python有两种不同的方式提供生成器)

【1】生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果,yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便于下次从它离开的地方继续执行。

【2】生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表。

3.列表解析:

总结:

1.把列表解析的[]换成()得到的就是生成器表达式

2.列表解析与生成器表达式都是一种便利的变成方式,只不过生成器表达式更加节省内存

3.Python不但使用迭代器协议让for循环更加通用。大部分内置函数也是使用迭代器协议访问对象的。例如,sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以,我们可以直接计算一系列值得和:

而不用多此一举的先构造一个列表:

转自:python教程:迭代器,生成器与for循环机制-侵删

python yield理解_python教程:迭代器,生成器与for循环机制相关推荐

  1. python yield用法_Python中迭代器和生成器的区别?

    公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开始, ...

  2. python生成器yield原理_Python的迭代器和生成器 使用实例及yield的使用

    <派森>(Python)3.13 win32 英文安装版 类型:编程工具大小:21M语言:英文 评分:8.7 标签: 立即下载 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素 ...

  3. python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】

    python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含 ...

  4. python yield理解_Python3 中 Yield 理解与使用

    转自Felix文章 Python3 中 yield 对初学者一直是一个难点存在,网上很多教程,噼里啪啦写了很多,也举了很多例子,但是读完之后还是不知所以然,下面问题还是不知道如何回答,内容有点多,有些 ...

  5. 如何用python生成软件_python中的生成器函数是如何工作的?

    1. python中的普通函数是怎么运行的? 当一个python函数在执行时,它会在相应的python栈帧上运行,栈帧表示程序运行时函数调用栈中的某一帧.想要获得某个函数相关的栈帧,则必须在调用这个函 ...

  6. python self理解_Python列表理解

    python self理解 In our previous tutorial we learned about Python Sort List. In this tutorial we will l ...

  7. Python学习教程(Python学习视频_Python学习路线):Day04循环结构

    Python学习教程(Python学习视频_Python学习路线):循环结构 循环结构的应用场景 如果在程序中我们需要重复的执行某条或某些指令,例如用程序控制机器人踢足球,如果机器人持球而且还没有进入 ...

  8. 我对python的理解_python高级函数以及我对python的理解

    常见的高级函数:lambda.map.reduce.filter.list comprehension lambda 匿名函数,限制一个表达式 m = lambda x,y:x+y # 5 m(2,3 ...

  9. python yield理解_对Python中Yield的理解

    看到下面这段程序的时候,有点不明白这个yield到底是个啥东西,看了网上很多的博客,大致理解了yield的含义,所以记录下来. 要说yield首先要说python中的生成器,那么什么是生成器? 假设有 ...

  10. Python中的装饰器,迭代器,生成器

    1. 装饰器 装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象. 强调装饰器的原则:1 不修改被装饰对象的源代码 2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的 ...

最新文章

  1. 当代大学生对学习Linux的一点拙见
  2. XMLHttpRequest Post参数
  3. qemu运行linux内核很慢,linux – qcow2图像的qemu存储性能非常慢
  4. CF-525E(E. Anya and Cubes) Meet-in-the-Middle
  5. 排序算法——归并排序
  6. 密码学AES算法_S盒_C值搜索
  7. Linux基础优化方法(三)———字符集编码设置优化
  8. [转]自定义序列化对象
  9. Buildroot构建指南——Linux内核
  10. 【spring源码学习】spring的aop目标对象中进行自我调用,且需要实施相应的事务定义的解决方案...
  11. Ubuntu 系统安装APACHE PHP MYSQL
  12. HDU 1007 Quoit Design(分治)
  13. jQuery中resetForm与clearForm的区别?
  14. ubuntu定时任务cron 访问网址php
  15. Opencv结合socket进行视频传输(TCP协议)
  16. 微信小程序开发进阶篇(mpvue)
  17. 黑盒测试——因果图法
  18. 全面公测 | 百度智能云CCE在离线混部功能
  19. 姜小白的Python日记Day12 迭代器与内置函数
  20. 生成自签名证书:生成证书和秘钥

热门文章

  1. 微软威胁情报中心总经理 John Lambert 谈安全
  2. 3. 密切与企业的合作,构建“产学合作”教育模式
  3. 在 Linux 系统上源码安装 GTK+ 2.0
  4. unity物体挂leap交互脚本后在另一个相机视野中看不见问题的解决
  5. Atitit 高等教育 中产教育 普通教育的异同 目录 1. 顶层精英教育 1 1.1. 领导力 影响力 1 1.2. 国王规范 1 1.3. 宗教领袖 1 1.4. 决策能力 1 1.5. 国际视
  6. Atitit go语言 golang 艾提拉总结特性优缺点 目录 1. Go 语言最主要的特性: 1 2. 体积大概100M 1 3. 问题 1 3.1. 编译速度和异常控制怎么样 1 3.2.
  7. 二维码资料 目录 1. 二维码QR Code 1 2. 发展历程 1 3. 特点 2 4. 存储 3 5. 分类 3 5.1.1. 按原理分 3 6. 区别 与条码区别 5 7. 什么是码制?
  8. Atitit 编程语言的类型系统 目录 1.2. 动态类型语言(Dynamically Typed Language): 1 1.3. 静态类型语言(Statically Typed Languag
  9. Atitit.ati  str  字符串增强api
  10. Atitit. 软件GUI按钮与仪表盘--web服务器区--获取apache配置文件路径 linux and apache的启动、停止、重启