码迷,mamicode.com
首页 > 编程语言 > 详细

python中的生成器

时间:2019-10-21 09:15:42      阅读:93      评论:0      收藏:0      [点我收藏+]

标签:返回   生成   完整   highlight   直接   跳转   包含   二次   pre   

什么是生成器?

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含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、迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时保留的,而不是新创建的

 

python中的生成器

标签:返回   生成   完整   highlight   直接   跳转   包含   二次   pre   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!