def odd():
print("step 1")
yield 1
print("step 2")
yield 3
print("step 3")
yield 5
o = odd()
生成器是一种迭代。其特点是,不同于for()
这种迭代,会将所有的迭代值全部展现出来,生成器只会在调用它的时候,来返回迭代值。以上的odd()
函数,就是一个迭代器。调用它会有以下结果:
>>>next(o)
>>>step 1
1
>>>next(o)
>>>step 2
3
>>>next(o)
>>>step 3
5
>>>next(o)
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
next(o)
StopIteration
这些都是引用的廖雪峰老师的代码。
值得注意的是,想要用next()
调用迭代器的时候,必须要给迭代器一个对象,譬如上面的o
。
再来说yield
这个关键字,我在廖老师的网站学习的时候,一开始接触它,感觉很迷茫。不知道是什么意思,然后上网看了一下别人的文章,发现有人将其理解为一个类似于return()
的函数。这样一下子我就明白了。实际上yield
也返回了值,如上代码。
生成器被调用的时候,在运行到yield
处,返回值。然后在,下次调用时,从yield
后面的代码开始继续运行。
写本文的目的是,加强一下学习记忆。给自己一个印象。本人仅仅还是一个初学者。
网友评论