首页 > 代码库 > python yield 关键字
python yield 关键字
最近看代码看到python里面的yield关键字,和我之前接触的语言好像都没有来着,我就查了查它的含义,大概理解如下:
>>> def createGenerator():... mylist = range(3)... for i in mylist:... yield i*i...>>> mygenerator = createGenerator() # create a generator>>> print(mygenerator) # mygenerator is an object!<generator object createGenerator at 0xb7555c34>>>> for i in mygenerator:... print(i)014
1.它和return差不多的用法,只是最后是返回了一个生成器。
2.了解yield 必须知道,当你调用yield所在的那个函数的时候,那个函数并没有运行,只会返回一个生成器的对象。
当然 上面的理解来自于:
3.当你第一次在for中调用生成器的的对象,它将会运行你函数中的代码从最开始一直到到碰到了yield的关键字,然后它会返回循环中的第一个值。然后每一次其他的调用将会运行你在这个函数中所写的循环多一次,并且返回下一个值,知道没有值可以返回了。
生成器可以认为是空的,如果这个函数运行但是没有运行到yield上。这也许是因为循环的结束,也许是因为你没有写一个安全的if/else。
这里又涉及到生成器的问题:
生成器和迭代器差不多,但是它只能运行一次,因为它不是把值存在内存中,而是直接运行生成值,所以我理解应该是定义的时候需要代码块的。
>>> mygenerator = (x*x for x in range(3))
>>> for i in mygenerator:... print(i)014>>> for i in mygenerator:... print(i)
再运行一次for就不会打印出来东西了。
当然 上面的理解来自于:
http://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do-in-python
挺好的。
很想吐槽下,我查内地的网站的这个关键字的解释,给出的代码实例就把我绕晕了,并且拆开来看完全没有必要给那么复杂的代码事例。
python yield 关键字
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。