【python】生成器和yield

时光怂恿深爱的人放手 提交于 2020-03-04 19:57:01

python生成器和yield

再一次遇到yield表达,复习了一下生成器,顺手记录一下。

  • iterable:可迭代对象,只要内部实现了__iter____getitem__方法的对象就是可迭代的,如list, dict, tuple, set, str等;
  • iterator:迭代器,内部实现了__iter__next()方法的对象;iterable不一定是iterator,但可以进行转化。
    l = [1, 2, 3]
    iterator_l = iter(l)
    
  • generator:生成器是一种特殊的迭代器,它通过生成函数迭代形成。generator的生成方式一般有两种:yield()
    generator_ = (x for x in range(5))
    
    def generator_():
    	for i in range(5):
    		yield i
    

生成器的特点

  • 惰性求值(lazy evaluation),每次调用next()才会计算下一个值。节省内存空间
  • 一次性,生成器中的元素一次性使用,用完就没了不能重复用。

因此,若涉及到要用到全部元素或排序等操作,相比之下用list会更合适

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!