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会更合适
来源:CSDN
作者:Sarah Huang
链接:https://blog.csdn.net/weixin_44794704/article/details/104651944