迭代器

迭代器是一个可以记住遍历的位置的对象,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

方法:iter() ,next()。

载体:字符串,列表或元组对象都可用于创建迭代器:

示例:for循环取出列表和字符串中的元素

list=[1,2,3]
it_list = iter(list)
for it in it_list:print it
str = "abc"
it_str = iter(str)
for it in it_str:print it

生成器

使用了yield 的函数被称为生成器(generator),生成器是一个返回迭代器的函数,只能用于迭代操作。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。它最大的特点在于并非一次性全部生成,而在于每次调用都生成当前一轮循环,再次调用则再次生成,直到循环结束或是本次生成数据已到终点(例如文件读取完毕或是判断条件变成false)。

使用yield的函数并不会一次执行完毕,仅仅返回一个迭代对象,当读取该迭代对象时,它并没有完全读取迭代内容,而是根据代码需求每次读取一部分,从而节约了资源。

函数执行结束时,生成器自动抛出StopIteration异常,表示迭代完成,在for循环里,无需处理 StopIteration 异常,循环会正常结束。

在一个生成器函数中,如果没有return,则默认执行至函数完毕,如果在执行过程中return,则直接抛出 StopIteration 终止迭代。

可以利用 isgeneratorfunction 判断一个函数是否是一个特殊的 generator 函数isgeneratorfunction(readfile)

while True必须有,否则迭代器无法驻留,轮询一行就会结束;

示例:yield字段将readfile函数变成一个文件迭代器,每次的输出都是文件中的一行内容,for循环调用该函数时,每次执行到yield data语句时,该函数就会将当前数据保留并传递给item,接着再次下一个循环。

def readfile():seek = 0while True:with open('test_server.py','r') as f:f.seek(seek)data = f.readline()if data:seek = f.tell()yield dataelse:returnfor item in readfile():print item

转载于:https://blog.51cto.com/silihedayuan/1903573

迭代器与生成器yield相关推荐

  1. python3可迭代对象、迭代器、生成器、协程yield入门

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2019-01-24 16:13:07 # @Author : cdl (1217096 ...

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

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

  3. python生成器单线程_【Python】迭代器、生成器、yield单线程异步并发实现详解

    转自http://blog.itpub.net/29018063/viewspace-2079767 大家在学习python开发时可能经常对迭代器.生成器.yield关键字用法有所疑惑,在这篇文章将从 ...

  4. python 迭代器、生成器、yield、iter

    文章目录 1. 迭代器 2. 生成器 3. 标准库 3.1 过滤 3.2 映射 3.3 合并 3.4 排列组合 3.5 重新排列 4. yield from 5. 可迭代的归约函数 6. iter 还 ...

  5. 再谈迭代器,生成器,yield,及和类的使用

    最近写项目时,遇到类嵌套和yield的混合使用,觉得比较典型,正好借此加深对迭代器和生成器的理解. 代码 代码抽象如下: from types import FunctionTypeclass Row ...

  6. 初学者python笔记(迭代器、生成器、三元表达式、列表解析、send()与yield())

    文章目录 迭代器与for循环的关系 1. 迭代器协议 2. 可迭代对象 3. for循环的本质 4. 强大的for循环机制 5. 迭代器如何工作的 6. while循环模拟for循环与迭代器的结合 7 ...

  7. Python迭代器和生成器详解(包括yield详解)

    文章目录 一.迭代器 1. 可迭代对象(Iterable) 2. 迭代器对象(Iterator) 3. for 循环原理 4. 迭代器的优缺点 二.生成器 1. yield 原理 2. yield 和 ...

  8. Python中的yield关键字及表达式、生成器、生成器迭代器、生成器表达式详解

    文章目录 1. yield关键字及表达式.生成器.生成器迭代器.生成器表达式 1.1 yield关键字及表达式(yield expression) 1.1.1 yield关键字 1.1.2 yield ...

  9. 完全理解Python迭代对象、迭代器、生成器

    本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网 ...

最新文章

  1. Linux中autoduck批量对接,科学网—用AutoDock进行分子对接教程——半柔性对接 - 杜文义的博文...
  2. 企业网络推广——网站页面布局优化对于企业网络推广来说非同一般
  3. 向量时钟算法简介——本质类似MVCC
  4. 5.2.4.最简单的模块源码分析3
  5. 九宫格C语言递归程序,[置顶] C语言递归实现N宫格(九宫格)源码
  6. 勒索病毒攻击应急防范
  7. 【大牛系列教学】靠着这份面试题跟答案
  8. MATLAB的Kmeans函数实现聚类
  9. linux驱动编写(usb host驱动入门)
  10. wex5中集成的mysql数据库 打开时一闪而过 报错
  11. Java项目:医院门诊收费管理系统(java+html+jdbc+mysql)
  12. 差异表达基因变化倍数_差异基因表达分析,如何寻找差异表达的基因?
  13. 华为外包测试2年,不甘被替换,168天的学习转岗成正式员工
  14. while循环:珠穆朗玛峰案例
  15. 数据结构之线性表----一文看懂顺序表、单链表、双链表、循环链表
  16. 全世界最亏本的事(转)
  17. 标准盒模型 与 怪异盒模型
  18. html div背景图片路径,css如何设置背景图片位置?
  19. 最适合微商的直播平台——微信直播
  20. MAC设置允许任何来源

热门文章

  1. linux kernel 开发详细文档 安装方法
  2. 猜拳游戏c语言代码流程图,这是一个猜拳游戏的程序 大家有更好的解决方法么?...
  3. vue里获取不到data_vue methods中取不到data值
  4. cmw500综合测试仪使用_大屏幕真彩色互感器综合特性测试仪功能特点
  5. 【 MATLAB 】使用 MATLAB 作图讨论有限长序列的 N 点 DFT(强烈推荐)(含MATLAB脚本)
  6. 为什么要把js放在body的末尾?
  7. JavaScript实现在线MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程序员在线工具网...
  8. DWS和各异构数据库的差异对比
  9. 如何让history命令显示带时间
  10. 【Udacity】异常值检测/删除