循环对象
所谓的循环对象,包含有一个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.
'
>>>f.__next__()
"My English isn't very well.
"
>>>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)
生成器
生成器(generator)的主要目的是构成一个用户自定义的循环对象.
生成器的编写方法和函数定义类似,只是在return的地方改为yield。生成器中可以有多个yield。当生成器遇到一个yield时,会暂停运行生成器,返回yield后面的值。当再次调用生成器的时候,会从刚才暂停的地方继续运行,直到下一个yield。生成器自身又构成一个循环器,每次循环使用一个yield返回的值。
下面是一个生成器例子:
def generator():
a = 100
yield a
a = a*10
yield a
yield 10000
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