您的位置:首页 > 编程语言 > Python开发

Python的yield相关理解

2017-03-23 14:49 267 查看

迭代器、生成器、yield

@(Python学习笔记)[python]

迭代器生成器yield
迭代器

生成器

yield

迭代器

对于
list,set,dict
等,都可以用
for ... in ...
的方式进行迭代。

生成器

generator = (x*x for x in range(3))
,这样就生成了一个生成器,生成器也可以用
for...in...
调用,但是只能调用一次。

yield

#生成迭代器
>>> def createGenerator():
...    mylist = range(3)
...    for i in mylist:
...        yield i*i
...
>>> mygenerator = createGenerator() # 创建生成器
>>> print(mygenerator) # mygenerator is an object!
<generator object createGenerator at 0xb7555c34>
>>> for i in mygenerator:
...     print(i)


生成的生成器只能调用一次,普通情况下用生成器可能并不会显得方便,但是当函数返回的集合规模很大并且希望只读一次的时候,这种方式就很方便了。其中一个典型的应用就是在
scrapy
中,在返回
item
时,都是用的
yield


要理解
yield
,其中很重要的一点就是记住,当在调用
createGenerator()
的时候,函数中的代码并没有执行,而只是返回了一个对象。

当用
for
迭代生成器对象的时候,函数中的代码开始执行,并且在遇到
yield
时,返回一个结果,然后继续执行(迭代),直到不再遇到
yield


参考文章

1.https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/1/README.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息