• python--生成器


    生成器的创建方式

      1. 列表生成式()(最复杂的也只是三元运算)

    1 a = (i for i in range(10))

      2. 函数(利用yield来生成一个生成器)

        yield和return的区别:

        1. return 返回并中止function

        2.yield返回数据,并冻结当前的执行过程。

    ·      (next 相当于是唤醒冻结的函数执行过程,继续执行,直到遇到下一个yield, 

           当然,还可以利用__next__()方法唤醒)

        注意:在用yield来生成一个生成器时,只要有yield就是生成一个生成器,只要有

        yield,return就相当于是终止生成器,其返回值其实也可以捕捉。则就会出

        现StopIteration异常。就会返回return返回的值

        那么我们怎么实现自己让生成器动态终止呢?

        答:是不是我们要告诉生成器,不需要你返回了。那我们就要向生成器传入信号。python

        当中就用send实现了,呵呵。I Love Python。看下面代码啦,,,

    def myRange(n):
        count = 0
        while count<n:
            #print(count)
            yield count
            count+=1
    ge = myRange(10)
    next(ge)
    next(ge)
    ge.__next__()

    ge.send("stop")
    #1. 唤醒并继续执行
    #2. 发送一个信息到生成器内部,诶,我们生成器是不是要接收一下呀!!!要判断信号呀,对吧?所以
    #我们的生成器代码是不是需要更新一下:
    def myRange(n):
        count = 0
        while count<n:
            #print(count)
            sign = yield count
         if sign =='stop':
          break
    count+=1
    #这样是不是我们就可以实现了?
    #其实在python当中打开文件也是生成了一个生成器。
    f = open('fileName','r')
    for data in f:
    print(data)


    注意:如果是第一次生成生成器时,调用里面的值时,是不可以传其它值的,要用send也就只能

    传入None进去!!!也就相当于我们用next是就是发了一个None过去,不能发其它信息,而用

    send就可以发送其他消息。

    python2

      range = list

      xrange = 生成器

    python3

      只有range为生成器

    坚持不一定成功,但放弃必定失败。
  • 相关阅读:
    用html自己开发自己的串口TCP通讯调试软件
    推荐模型PNN: 原理介绍与TensorFlow2.0实现
    推荐模型NeuralCF:原理介绍与TensorFlow2.0实现
    推荐模型DeepCrossing: 原理介绍与TensorFlow2.0实现
    推荐模型AutoRec:原理介绍与TensorFlow2.0实现
    ffmpeg命令的简单使用
    X264的交叉编译
    FDK_AAC交叉编译
    编译lame静态库
    iOS安全清单
  • 原文地址:https://www.cnblogs.com/bao9687426/p/9968409.html
Copyright © 2020-2023  润新知