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

Python 生成器

时间:2020-09-10 23:19:30      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:技术   实现   实现机制   div   开始   idt   方式   特性   ima   

  某个方法通过一定的算法会产生一组序列,且每次返回一个值的方式叫做生成器。

技术图片

  一,实现机制:

  方法(函数)在每次运算时,遇到yield后,返回当前的值,并记录当前运行的状态,再下次进入时,从记录的状态开始再次进入计算。

技术图片

二,特性:

   (1)以yield关键字定义一个生成器函数。

   (2)生成器函数返回的是一个生成器,并不是一个序列。需要通过next进行取值,值取完时会抛出StopIteration异常。

   (3)可通过for ... in的迭代方式进行取值。

   (4)取值方向只能向前取值,不能向后取值。

   (5)每个值只能取一次,使用完毕后再次next或者for迭代时,上次的值就会被释放。

  三,应用场景:

    对于会产生一个较大序列的函数,如果每次值访问其中一个或者几个值进行处理,处理完后不在需要该数据时,使用生成器。

  四,优势:

    (1)对于大数据处理,避免了开辟较大的空间存储序列数。

    (2)对于较大的计算,每产生一个数据后就返回,缩短响应时间。

  五,定义方式:

    (1) 元组迭代器生产的数据为生成器

    (2)通过yield关键字定义的函数

# (1)通过元组推导式生产生产器
t = (x*x for x in range(5))         # 产生一个生产器
print type(t)                       # <type ‘generator‘>
# 通过for ... in 迭代器访问
for item in t:
    print item                      

#(2)通过生产器函数生成生成器
def yield_test(n):
    d = 10
    for i in range(n):
        yield i + d
        d += 10

# 通next函数访问
item = yield_test(3)
print item.next()               
print item.next()
print item.next()

 

  

 

Python 生成器

标签:技术   实现   实现机制   div   开始   idt   方式   特性   ima   

原文地址:https://www.cnblogs.com/lwp-boy/p/13585807.html

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