【Python】学习笔记十五:循环对象

本文介绍了Python中的循环对象和生成器的基本概念与使用方法,并通过具体示例展示了如何利用生成器简化代码。同时,还讲解了列表推导式的用法。

循环对象

所谓的循环对象,包含有一个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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值