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

python函数第5天(day 24)

时间:2017-08-23 10:25:23      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:color   优点   send   __next__   无法   ret   迭代   关键字   yield   

可迭代的:对象下有__iter__方法的都是可迭代的对象

迭代器:对象.__iter__()得到的结果就是迭代器
迭代器的特性:
    迭代器.__next__() 取下一个值
    
    优点:
        1.提供了一种统一的迭代对象的方式,不依赖于索引
        2.惰性计算
        
    缺点:
        1.无法获取迭代器的长度
        2.一次性的,只能往后取值,不能往前退,不能像索引那样去取得某个位置的值
        
        
生成器:函数内带有yield关键字,那么这个函数执行的结果就是生成器

生成器本质就是迭代器
    def func():
        n=0
        while True:
             yield n
             n+=1
             
    g=func()

    res=next(g)
    res=next(g)

    for i in g:
        pass


总结yield的功能:
    1.相当于把__iter__和__next__方法封装到函数内部
    2.与return比,return只能返回一次,而yield能返回多次
    3.函数暂停已经继续运行的状态是通过yield保存的
    

    
    
    
    
    
yield的表达式形式:
    food=yield
    
def eater(name):
    print(%s start to eat %name)
    while True:
        food=yield
        print(%s eat %s %(name,food))
        
e=eater(zhejiangF4)
    

    #e.send与next(e)的区别
        #1.如果函数内yield是表达式形式,那么必须先next(e)
        #2.二者的共同之处是都可以让函数在上次暂停的位置继续运行,不一样的地方在于
            send在触发下一次代码的执行时,会顺便给yield传一个值
    
    


#协程函数的定义?
#协程函数的应用?

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    

    
    
    
    

 

python函数第5天(day 24)

标签:color   优点   send   __next__   无法   ret   迭代   关键字   yield   

原文地址:http://www.cnblogs.com/wanchenxi/p/7414456.html

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