zoukankan      html  css  js  c++  java
  • 生成器函数及生成器的基本用法

    初识生成器

      只要函数中有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>
    

      

  • 相关阅读:
    几个常见移动平台浏览器的User-Agent
    正则表达式那些事儿(三)
    正则表达式那些事儿(二)
    正则表达式那些事儿(一)
    jQuery官网plugins栏目下那些不错的插件
    UVA 11729 Commando War 突击战 【贪心】
    HDOJ 2084 数塔 【dp】
    HDOJ 1465 不容易系列之一 【错排公式 递推】
    HDOJ 2046 骨牌铺方格 【递推】
    HDOJ 2044 一只小蜜蜂... 【递推】
  • 原文地址:https://www.cnblogs.com/594504110python/p/9330760.html
Copyright © 2011-2022 走看看