博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Python】学习笔记十五:循环对象
阅读量:7234 次
发布时间:2019-06-29

本文共 1391 字,大约阅读时间需要 4 分钟。

循环对象

所谓的循环对象,包含有一个next()方法(python3中为__next__() ),这个方法的目的就是进行到下一个结果,而在结束一系列结果之后,举出StopIteration错误

当一个循环结构(例如for)调用循环对象时,它就会每次循环的时候调用next()方法,直到StopIteration出现为止,for循环接收到,就知道循环已经结束,停止调用next()

假设我们有一个文件data.txt

My English is not good.My English isn't very well.I can speak a little English.

运行python命令行

>>>f = open('data.txt')

>>>f.__next__()

'My English is not good.\n'
>>>f.__next__()
"My English isn't very well.\n"
>>>f.__next__()
'I can speak a little English.'
>>>f.__next__()
Traceback (most recent call last):
   File "<input>", line 1, in <module>
StopIteration

open()返回的实际上是一个循环对象,包含__next__()方法,而该next()方法每次返回的就是新的一行的内容,到达文件结尾时举出StopIteration。这样,我们相当于手工进行了循环。

自动循环如下:

for data in open("data.txt"):    print(data)
在这里,for结构自动调用next()方法,将该方法的返回值赋予给line。循环知道出现StopIteration的时候结束

生成器

生成器(generator)的主要目的是构成一个用户自定义的循环对象.

生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。

下面是一个生成器例子:

def generator():    a = 100    yield a    a = a*10    yield a    yield 10000
该生成器共有三个yield, 如果用作循环器时,会进行三次循环。

for i in generator():    print(i)

打印结果:

100

1000
10000

第二个生成器例子:

def gen():    for i in range(6):        yield i

调用生成器

for j in gen():    print(j)

打印结果

0

1
2
3
4
5

表推导

表推导(list comprehension)是快速生成表的方法。它的语法简单,很有实用价值。

表推导案例:

L = [x**2 for x in range(4)]

打印

for i in L:    print(i)

打印结果

0

1
4
9

转载地址:http://nclfm.baihongyu.com/

你可能感兴趣的文章
C#回顾 –6.特性
查看>>
Spring和cxf3的整合,以maven的方式
查看>>
Apache Shiro系列三,概述 —— 10分钟入门
查看>>
servlet生命周期
查看>>
Java 网络编程
查看>>
数据库的物理结构和逻辑结构
查看>>
Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)
查看>>
Hadoop HDFS编程 API入门系列之合并小文件到HDFS(三)
查看>>
【MyEcplise】build workspace卡死
查看>>
基于资源的权限系统-API设计
查看>>
如何区分USB 2.0 和USB 3.0插口
查看>>
排序及重复元素去重的说明,TreeSet,HashSet
查看>>
SQLServer 维护脚本分享(05)内存(Memory)
查看>>
Java代码调用Oracle的存储过程,存储函数和包
查看>>
InstallShield 2015 LimitedEdition VS2012 覆盖安装
查看>>
mongodb防火墙配置
查看>>
ensp实战之防火墙安全转发策略
查看>>
Activity和Fragment之间解耦
查看>>
modbus协议说明(转)
查看>>
vc编辑器常用设置
查看>>