zoukankan      html  css  js  c++  java
  • 列表生成器

    第一种:
    a(i  for i in range(5))
    next(a)
    # 到最后一个会报错

    for i in a:
        print(a)  # 不会报错

    第二种:
    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b  # 把函数的执行过程冻结在这一步,并且把b的值返回给外面的next,把函数生成一个生成器
            a, b = b, a + b
            n = n + 1
        return 'done'

    f = fib(15)
    for i in f:
        print(i)


    python2
        range  = list
        xrange = 生成器
        
    python3
        range = 生成器
        xrange  没有
        
    生成器的创建方式
        1、列表 生成 式()
        2、函数
        
        yield vs return
        
        return 返回 并中止function
        yield  返回 数据,并冻结当前的执行过程
        
        next 唤醒冻结的函数执行过程,继续执行,知道遇到下一个yield
        
        生成器中有return 报错,相当于生成器中止了
        
    函数有了yield 之后
        1、函数名加() 就得    到了一个生成器
        2、return 在生成器里, 代表 生成器的中止,直接 报错
    next
        唤醒 生成器并继续 执行

    示例:
    def range2(n):
        count = 0
        while count < n:
            print('count', count)
            count += 1
            sign = yield count
            if sign == 'stop':
                print('-------sign', sign)
                break
        return 3333
        

    new_range = range2(3)

    n1 = next(new_range)

    new_range.send('stop')
    #1、唤醒并继续执行
    #2、发送一个信息到生成 器内部

    new_range.send(None)  # 第一次是发送一个None,next()相当于发送了一个None,send() 可以发送别的

  • 相关阅读:
    【PyQt5-Qt Designer】QSpinBox-微调框
    【PyQt5-Qt Designer】QProgressBar() 进度条
    【PyQt5-Qt Designer】QSlider滑块
    Tomcat eclipse 启动时一个工程影响另一个工程
    apache thrift 和 apache jersey 记录
    常用 Linux 命令
    mac 命令记录
    eclipse m2eclipse 从Maven的本地库中读取依赖库
    成功build Maven但eclipse中依然显示该工程有错误
    mac install: /usr/bin/unrar: Operation not permitted
  • 原文地址:https://www.cnblogs.com/fmgao-technology/p/9063204.html
Copyright © 2011-2022 走看看