python中的生成器

什么是生成器?

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

eg:

def bar():
l = ['a','b','c']
for i in l:
yield i
res = bar()
for i in res:
print(i)
>>> a
>>> b
>>> c
def test():
list=[]
for I in range(10):
list.append(i)
i+=1
return list
res=test()
print(res)
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

def test():
for i in range(6):
yield i
res=test()
for i in res:
print(i)
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
>>> 5

总结:

  • 生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
  • 生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。
  • 只要函数里有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码
  • yield可以返回多个值,并且同一时间内存里值存储一个值,只能向后取值,不能向前取值

生成器的特点:
  1、节约内存
  2、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

 

作者:无荨

-------------------------------------------

个性签名:学IT,就要做到‘活到老学到老’!

如果觉得这篇文章对你有小小的帮助的话,别忘记点个“推荐”哦!

原文地址:https://www.cnblogs.com/twoo/p/11672169.html