python yield学习心得

来源:互联网 发布:网络科技产品 编辑:程序博客网 时间:2024/06/05 08:48

1.首先,当函数中包含yield的时候,它本身就已经不再是一个普通的函数,而是变成了一个生成器generator(和List类似,List:     

   [..,..,..],generator:(..,..,..),访问元素时用next()函数),只不过里面的元素还没有确定。

2.调用包含yield的函数之后,函数本身并不会执行,而是返回了一个迭代对象iterable,类似于range()只不过里面的元素还没有确定, 

   假设函数g()是一个包含的yield的生成器函数,for i in g():·········

3.yield和return有相同的功能,即返回一个值,区别是执行完return后函数就会结束,而执行yield之后只是会暂停,此时便产生了一个

   值,for i in g():·········中的 i 此刻就获取到了这个返回值,然后在进行下一次循环时,原函数会从暂停的地方接着执行,直至再遇到

   yield,然后暂停并返回下一个值。

4.其实上述功能也可以  通过直接运行完函数,然后返回一个list来实现,但用yield实现的好处是:调用普通函数返回List会占用比较大 

   的空间,而调用包含yield的生成器函数返回了一个  迭代对象  ,只占用比较小的空间(姑且可以理解成在调用时因为函数还没执

   行,所以生成器中还是空的,而在执行循环过程中每次只返回一个值,所以始终占用较小的空间)

0 0
原创粉丝点击