【Python之旅】第二篇(九):迭代器

说明:关于Python中迭代器的解释

    Iterator是迭代器的意思,它的作用是一次产生一个数据项,直到没有为止。这样在 for 循环中就可以对它进行循环处理了。那么它与一般的序列类型(list, tuple等)有什么区别呢?它一次只返回一个数据项,占用更少的内存。但它需要记住当前的状态,以便返回下一数据项。它是一个有着next()方法的对象。而序列类型则保存了所有的数据项,它们的访问是通过索引进行的。

    举个前面的例子来说就像readlines和xreadlines的区别,readlines是一次性读入放入内存中,而xreadlines是每次只读取一行放入内存中,这意味着,在读取当前行的时候,需要有相应记数器记下当前的读取状态,暂时可以先这样去理解。


1.实例1:使用next()函数来读取迭代器中的数

·可演示如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

>>> a = iter(range(10))    #创建一个迭代器

>>> a

<listiterator object at 0x7f251917ec10>

>>> a.next()

0

>>> a.next()

1

>>> a.next()

2

>>> a.next()

3

>>> a.next()

4

>>> a.next()

5

>>> a.next()

6

>>> a.next()

7

>>> a.next()

8

>>> a.next()

9

>>> a.next()

Traceback (most recent call last):

  File "<stdin>", line 1in <module>

StopIteration

·a存放的是迭代器中的地址,next()可以读取下一个位置的元素;

·next()函数不会判断迭代器的结束,只能根据输出异常来判断迭代的结束;


2.readline的简单解释

·文件操作也可以通过next()函数读取每一行:


1

2

3

4

5

6

7

8

9

10

11

>>> f = file('student_info.txt')

>>> f.next()

'stu1101 mingjia.xu 275896019@qq.com 263 SystemAdmin 18810404260\r\n'

>>> f.next()

'stu1102 Yangjiansong jason@s156.com A8music SystemAdmin 13601247960\r\n'

>>> f.next()

'stu1103 zouxinkai zouxinkai_2006@126.com jishubu systemadmin 1861214111'

>>> f.next()

Traceback (most recent call last):

  File "<stdin>", line 1in <module>

StopIteration

·readline也是通过上面迭代的方式来处理文件内容,只是readline增加了异常处理的功能,因此不会报错:


1

2

3

4

5

6

7

8

9

>>> f = file('student_info.txt')

>>> f.readline()

'stu1101 mingjia.xu 275896019@qq.com 263 SystemAdmin 18810404260\r\n'

>>> f.readline()

'stu1102 Yangjiansong jason@s156.com A8music SystemAdmin 13601247960\r\n'

>>> f.readline()

'stu1103 zouxinkai zouxinkai_2006@126.com jishubu systemadmin 1861214111'

>>> f.readline()

''


3.通过循环获取迭代器中的内容

·演示如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

>>> a = iter(range(10))

>>> while True:

...  a.next()

... 

0

1

2

3

4

5

6

7

8

9

Traceback (most recent call last):

  File "<stdin>", line 2in <module>

StopIteration

·只能通过类似while True循环实现;

·通过该方法可以获取迭代器中的内容,并进一步对异常情况进行处理。

时间: 2024-10-26 16:57:36

【Python之旅】第二篇(九):迭代器的相关文章

「C语言回顾之旅」第二篇:指针详解进阶

说明:     第一篇回顾了指针的基本概念以及基本使用,因此对指针也有了一个较为清晰的思路,但实际上第一篇关于指针的内容是不太容易忘记的.这是第二篇中的内容是比较容易混淆,但对于指针的进一步学习也是非常重要的. 一.指向函数的指针 1.函数指针 ·函数指针即指向函数的指针,函数指针值为函数的入口地址,通过使用该指针,即可以使用该函数: ·编写一个程序返回两个数的最大值,通过函数指针调用函数: a.main函数代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

拒绝从入门到放弃_《Python 核心编程 (第二版)》必读目录

目录 目录 关于这本书 必看知识点 最后 关于这本书 <Python 核心编程 (第二版)>是一本 Python 编程的入门书,分为 Python 核心(其实并不核心,应该叫基础) 和 高级主题 两大部分,以 Python 2.x 作为主要演示版本,涵盖的知识面广,知识点较齐全,代码多且好理解,但对 Python 版本特性的内容太久远,不合时宜. 整体来说 Python 核心 部分是主要内容,高级主题 部分作为应用扩展内容.后半部分篇幅较短,内容不够深入,只到了解的层面,好在横向够广(每一个主

CoreOS Fest 系列之第二篇: Systemd、Go、Calico、Sysdig

本文讲的是CoreOS Fest 系列之第二篇: Systemd.Go.Calico.Sysdig,[编者的话]在 CoreOS Fest 第二天的会议中,演讲者展示了多个开源项目和工具,包括 Systemd 和 CoreOS . Go 语言和容器. Calico 项目. Sysdig 等. 在 CoreOS Fest 的第一天会议中,陆续介绍了 CoreOS 的架构.规划和规范.第二天的会议,演讲者展示了多个开源项目和工具,包括 systemd-nspawn . Calico 项目和 Sysd

ASP.NET自定义控件组件开发 第一章 第二篇 接着待续

很感谢大家给我的第一篇ASP.NET控件开发的支持!在写这些之前,我也看了一些例子,想选中一些好 上手的例子,这样,可能一些例子大家以前都见过,但是我想说:同样是弹钢琴,同样一首"命运交响曲 ",有的人弹的让人荡气回肠,有的人弹的就很一般. 受了李建忠老师的启发,发现用一种演化式的让人更好的接受. 好了,废话不说了.继续开发!希望大家支持! 我们之前开发了一个很简单的自定义的控件,方法很简单,只是把原来的html文本传入 writer.Writer()方法的参数,然后输出.其实从模式的

JavaWeb开发入门第二篇Tomcat服务器配置讲解_java

一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml配置文件中的Connector节点进行的端口修改 例如:将Tomcat服务器的启动端口由默认的8080改成8081端口 Tomcat服务器启动端口默认配置 <Connector port="8080" protocol="HTTP/1.1" connectionT

Sql Server之旅——第二站 理解万恶的表扫描

原文:Sql Server之旅--第二站 理解万恶的表扫描 很久以前我们在写sql的时候,最怕的一件事情就是sql莫名奇妙的超级慢,慢的是撸一管子回来,那个小球还在一直转...这个着急也只有当事人才 明白,后来听说有个什么"评估执行计划",后来的后来才明白应该避免表扫描... 一:表扫描 1.现象 "表扫描"听起来很简单,不就是一行一行的扫嘛,你要说"执行计划"的话,我也会玩,为了更可观,我build一个表,再插入三行数据,如下图:   上面的P

Android开源项目第二篇——工具库篇

Android开源项目第二篇--工具库篇 本文为那些不错的Android开源项目第二篇--开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他.   最新内容请访问AndroidOpenProject@Github,欢迎Star和Fork.   Android开源项目系列汇总已完成,包括: Android开源项目第一篇--个性化控件(View)篇Android开源项目第二篇--工具库

Javascript之旅——第二站:对象和数组

原文:Javascript之旅--第二站:对象和数组   一觉睡到中午,本来准备起来洗洗继续睡,不过想想没辙,还得继续这个系列,走过变量的第一站,第二站我们再来看看对象和数组.   一:对象   说起对象,我们不自然就想起了面向对象中自封装的一个类,同样JS中也是遵循这个守则,在web编程中几乎天天用到的就是JSON.是的, 这就是一个对象,不过这个对象下面的字段都是字符串和值类型,如下图. 1 var delivery = { 2 no: 1, 3 sendtime: "2014-11-25&

【实战HTML5与CSS3 第二篇】绚丽的快速导航!

原文 http://www.cnblogs.com/yexiaochai/archive/2013/05/01/3051632.html 目录 [实战HTML5与CSS3 第一篇]初探水深,美丽的导航,绚丽的图片爆炸!! [实战HTML5与CSS3 第二篇]绚丽的快速导航! [实战HTML5与CSS3 第三篇]我第一个HTML5网页诞生了(提供源码) 前言 今天9点就起来了,因为下午出去有个聚会,所以就早点起来进行,否则这个进度有点吃紧啊,昨天初略的完成了导航以及爆炸的图片,这里来回顾下: 1

深入理解javascript作用域第二篇之词法作用域和动态作用域_javascript技巧

前面的话 大多数时候,我们对作用域产生混乱的主要原因是分不清楚应该按照函数位置的嵌套顺序,还是按照函数的调用顺序进行变量查找.再加上this机制的干扰,使得变量查找极易出错.这实际上是由两种作用域工作模型导致的,作用域分为词法作用域和动态作用域,分清这两种作用域模型就能够对变量查找过程有清晰的认识.本文是深入理解javascript作用域系列第二篇--词法作用域和动态作用域 词法作用域 第一篇介绍过,编译器的第一个工作阶段叫作分词,就是把由字符组成的字符串分解成词法单元.这个概念是理解词法作用域