for循环可以用于python中任何序列类型,包括序列、元组以及字符串。例如:

>>> for x in [1,2,3,4]: print(x * 2,end='')
...
2468

>>> for x in (1,2,3,4): print(x * 2,end='')
...
2468

>>> for y in 'python': print(y * 2 ,end=' ')
...
pp yy tt hh oo nn

实际上,for循环甚至比这更为通用:可用于任何可迭代对象。可以认为for是一种迭代工具,还有一些例如:列表解析、in成员关系测试以及map内置函数等。

文件迭代器

文件有一个方法,名为__next__,每次调用时,就会返回文件中的下一行。值得注意得是,到达文件末尾时,__next__会引发内置的StopIteration异常,而不是返回空字符串。

例如:

注意,这里的print使用end=''来一直添加一个\n,因为行字符串已经有一个(如果没有这点,我们的输出将变成两行隔开)、

这样读取文件的好处有三点:

1.写法简单

2.运行速度快

3.从内存使用的情况来说也是最好的

相同效果的原始方式,是以for循环调用文件的readlines方法,是将文件加载到内存,做成行字符串的列表。

虽然两种效果相同,但是后者是将文件一次性加载到内存,如果文件太大,计算机内存空间不够,甚至不能工作。前者迭代器版,对于这种问题就有了免疫功能。(python3通过重写i/o以支持unicode文本从而使的这一有点不明显,并更少依赖于系统)

当然也可以用while循环来实现,但是相对来说while还是比for慢。

手动迭代:iter和next

为了支持手动迭代代码,python3中还提供一个内置函数next,他会自动掉用一个对象的__next__方法。给定一个可迭代对象z,调用next(z)等同于z.__next__(),但是前者简单很多。例如:

从技术的技术的角度将,当for循环开始时,会通过它给iter内置函数,一便从可迭代对象获得一个迭代器,返回的对象含有需要的next方法。

列表以及很多其他的内置对象,不是自身的迭代器,因为他们支持多次打开迭代器。对这样的对象,我们必须调用iter来启动迭代:

从技术上讲,for循环调用内部等价的I.__next__,而不是这里使用的next(I)

现在我们展示一下自动和手动迭代之间的对等性:

关于try语句运行一个动作并且捕获运行过程中发生的异常,我将在后续发表文章,详细解说。

python迭代器生成器(一)的更多相关文章

  1. Python迭代器生成器与生成式

    Python迭代器生成器与生成式 什么是迭代 迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果.每一次对过程的重复称为一次"迭代",而每一次迭代得到的结果会作为下一次迭 ...

  2. Python 迭代器&生成器

    1.内置参数     Built-in Functions     abs() dict() help() min() setattr() all() dir() hex() next() slice ...

  3. python 迭代器 生成器

    迭代器 生成器 一 什么是迭代器协议 1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前 ...

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

    本节大纲 迭代器&生成器 装饰器  基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...

  5. python迭代器,生成器,推导式

    可迭代对象 字面意思分析:可以重复的迭代的实实在在的东西. list,dict(keys(),values(),items()),tuple,str,set,range, 文件句柄(待定) 专业角度: ...

  6. 4.python迭代器生成器装饰器

    容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用in, not in关键字判断元素是否包含在容器中.通常这类数据结构把所有的元素存储在内存中 ...

  7. python迭代器生成器

    1.生成器和迭代器.含有yield的特殊函数为生成器.可以被for循环的称之为可以迭代的.而可以通过_next()_调用,并且可以不断返回值的称之为迭代器 2.yield简单的生成器 #迭代器简单的使 ...

  8. Python迭代器生成器,私有变量及列表字典集合推导式(二)

    1 python自省机制 这个是python一大特性,自省就是面向对象的语言所写的程序在运行时,能知道对象的类型,换句话说就是在运行时能获取对象的类型,比如通过 type(),dir(),getatt ...

  9. Python迭代器生成器,模块和包

      1.迭代器和生成器 2.模块和包 1.迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和__next__()方法.    其中__it ...

  10. python迭代器生成器-迭代器和list区别

    迭代 生成 for循环遍历的原理 for循环遍历的原理就是迭代,in后面必须是可迭代对象 为什么要有迭代器 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但对于字典.集 ...

随机推荐

  1. 微信小程序大全(下)(最新整理 建议收藏)

  2. 基于HTML5 Canvas实现用户交互

    很多人都有这样的疑问,基于HTML5 Canvas实现的元素怎么和用户进行交互?在这里我们用到HT for Web(http://www.hightopo.com/guide/guide/core/b ...

  3. Linux_破解密码-营救模式

    实验用机:CentOS 5.7 破解密码 设置开机启动界面 系统运行级别 营救模式 一.破解密码 root用户可以更改任何用户的密码,普通用户只能修改自己的密码. 步骤: 1.重新启动系统 2.开机倒 ...

  4. 详细介绍php中的命名空间

    php命名空间的一个最明确的作用是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.上一章节介绍了什么是php命名空间.php官网已很明确的进行了定义并形象化解释,这 ...

  5. 对clear float 的理解

    之前自己对于清除浮动的用法比较模糊 ,如果用到的话,一般都是采用简单粗暴的方式解决,就是直接用overflow:hidden,但是越用久就会发现其实有BUG,这个BUG正是overflow:hidde ...

  6. OpenStack命令 创建网络和路由管理

    1.登陆用户 :tdy(前提条件创建了tdy用户) 编写登陆用户tdy用户 脚本文件  user-operc.sh user-operc.sh : 登陆用户tdy: $ source user-ope ...

  7. Java经典编程题50道之三十六

    有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数. public class Example36 {    public static void main(String[] a ...

  8. Floyd判圈算法

    Floyd判圈算法 leetcode 上 编号为202 的happy number 问题,有点意思.happy number 的定义为: A happy number is a number defi ...

  9. Asp.Net生命周期的详解

    一.Asp.Net页面生命周期的概念 当我们在浏览器地址栏中输入网址,回车查看页面时,这时会向服务器端IIS)发送一个request请求,服务器就会判断发送过来的请求页面,当完全识别 TTP页面处理程 ...

  10. [1] MVC & MVP &MVVM

    开发架构之MVC & MVP & MVVM