zoukankan      html  css  js  c++  java
  • python 生成器

    生成器 Generator (python 2.5及之后)
    什么是生成器:
    生成器是能够动态提供数据的对象,生成器对象也是可迭代对象(实例)

    生成器有两种:
    1. 生成器函数
    2. 生成器表达式

    生成器函数的定义
    含有yield语句的函数是生成器函数,此函数被调用将返回一个生成器对象
    yield 翻译为(产生或生成)

    yield 语句
    语法:
    yield 表达式
    说明:
    yield 用于 def 函数中,目的是将此函数作用生成器函数使用
    yield 用来生成数据,供迭代器的next(it) 函数使用

    生成器函数说明:
    生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
    在生成器函数调用return 会触发一个StopIteration异常

    1,函数生成器

    def myfactorial(n):
        s = 1
        x = 1
        sum = 1
        while s <= n:
            x = s
            sum *= x
            yield sum        #通过yield来生成结果,虽然现在一次性取出所有值,但实际上是需要时才立刻生成。
            s += 1
    
    L = list(myfactorial(6))
    print(L)
    
    print(sum(myfactorial(5)))

    输出结果:

    tarena@tedu:~/zengsf$ python3 exercise821.py
    [1, 2, 6, 24, 120, 720]
    153

    2,迭代式表达式个人感觉很好用,就是一个迭代推导式生成器表达式:

    生成器表达式:
    语法:
      (表达式 for 变量 in 可迭代对象 [if 真值表达式 ])
    说明:
      if 子句可以省略
    作用:
      用推导式的形式创建一个新的生成器

    生成器函数生成的数据已经被取完,再次遍历将拿不到数据。

        gen = (x ** 2 for x in range(1, 5))
        it = iter(gen)
        next(it)  # 1
        next(it)  # 4
        next(it)  # 9
        next(it)  # 16
        next(it)  # StopIteration
    
    ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    L = [2, 3, 5, 7]
    gen = (x**2+1 for x in L)
    it = iter(gen)
    for x in it:
        print(x)
    
    输出结果:
    
    tarena@tedu:~/zengsf$ python3 exercise821.py
    5
    10
    26
    50
  • 相关阅读:
    java继承
    java构造器
    java接口
    java 泛型详解---转载
    java竞争抢答器
    java并发资源访问_01
    java多线程数字加减
    java多线程计算机流水线模型
    Java并发编程:Callable、Future和FutureTask---转载测试
    购物车
  • 原文地址:https://www.cnblogs.com/zengsf/p/9514787.html
Copyright © 2011-2022 走看看