循环对象
所谓的循环对象,包含有一个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> StopIterationopen()返回的实际上是一个循环对象,包含__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