• 生成器函数及生成器的基本用法


    初识生成器

      只要函数中有yield的,就是生成器函数,(生成器函数只是生成可迭代的对象).

      yield的特性:

            1.和return差不多,都可以做返回值.

            2.只要在函数执行的过程中遇到了yield,就会暂停这个函数的运行,并返回yield后面值

            3.下次再执行这个函数就会从上一次暂停的地方重新往下执行

    # def outer():
    # 	print("马云")
    # 	yield '阿里巴巴'
    # 	print('马化腾')
    # 	yield '腾讯'
    # 	print('刘强东')
    # 	yield '京东'
    
    # ger = outer()
    # print(ger)      # 生成的是一个生成器
    # <generator object outer at 0x0000000002761F10>
    

     如何使用这个生成器 

       生成器是生成一个可迭代的对象,之前的list,str,dict等都是可迭代的对象,方法一致.

      2.1 方法一 

    # r1 = ger.__next__()     # 执行"__next__"是打印第一个yield之前的内容,r1接受的是第一个yield的返回值
    # print(r1)
    # 结果:
    # 马云
    # 阿里巴巴
    
    # 每一次执行生成器的"__next__"就是执行到下一个yield的出现
    # r2 = ger.__next__()
    # print(r2)
    # 结果:
    # 马云
    # 阿里巴巴
    # 马化腾
    # 腾讯
    

      

      2.2 方法二

    def outer():
    	print("马云")
    	yield '阿里巴巴'
    	print('马化腾')
    	yield '腾讯'
    	print('刘强东')
    	yield '京东'
    
    ger = outer()       # 这就是生成器函数"outer"的迭代器
    for i in ger:       #只要是可迭代的对象,for循环都可以进行迭代,迭代器既是可迭代对象,也是迭代器,所以可以使用for循环
    	print(i)
    # 结果:
    # 马云
    # 阿里巴巴
    # 马化腾
    # 腾讯
    # 刘强东
    # 京东
    

      2.3 方法三

      

    def outer():
    	print("马云")
    	yield '阿里巴巴'
    	print('马化腾')
    	yield '腾讯'
    	print('刘强东')
    	yield '京东'
    
    ger = outer()
    print(list(ger))        # 把yield的返回值放进一个列表,并以此执行函数里的代码
    

    send使用

    def outer():
    	print("马云")
    	a = yield '阿里巴巴'
    	print('我是a',a)
    	print('马化腾')
    	b = yield '腾讯'
    	print('我是b',b)
    	print('刘强东')
    	yield '京东'
    
    
    ger = outer()
    ger.__next__()
    ger.send("a")       
    ger.send("b")
    # 结果:
    # 马云
    # 我是a a
    # 马化腾
    # 我是b b
    # 刘强东
    

      

    send的执行过程

      

       3.2 __next__() 和 .send() 的区别,和注意事项

        1.send和next都是让生成器往下在执行一个yield.

        2.send可以上一个yield的位置传递一个值,不能给最后一个yield传递值,因为yield是给上一个yield传递一个值,所以第一次访问生成器,不能是send,只能是__next__()

    生成器表达式

    # 生成器表达式
    # gen = (n for n in range(1,6))
    # print(gen)      # gen是一个迭代器.迭代器需要使用"__next__"或迭代,来访问生成器里面的代码.
    # 结果:<generator object <genexpr> at 0x00000000028120A0>
    

      

  • 相关阅读:
    关于软件设计中遇到的问题
    关于power shell
    如果TChart的发生异常
    重温gof版《设计模式》中的创建型模式
    如何更好的使用cvs
    存储过程返回临时表的问题
    关于bugzilla与svn结合的配置注意事项
    VC知识点:如何用vc6调试CGI程序
    如何让应用程序托盘化
    符号表
  • 原文地址:https://www.cnblogs.com/594504110python/p/9330760.html
Copyright © 2020-2023  润新知