• Python 生成器


        生成器是一次生成一个值的特殊类型函数。可以将其视为可恢复函数。调用该函数将返回一个可用于生成连续 x 值的生成【Generator】,简单的说就是在函数的执行过程中,yield语句会把你需要的值返回给调用生成器的地方,然后退出函数,下一次调用生成器函数的时候又从上次中断的地方开始执行,而生成器内的所有变量参数都会被保存下来供下一次使用,如下就是一个生成器:

    In [3]: gen = (i for i in range(5))     # 创建一个生成器
    
    In [4]: gen.next()    # next()方法可以每次调用一个值,然后退出函数
    Out[4]: 0
    
    In [5]: gen.next()    # 下一次调用生成器的时候又从上次中断的地方开始执行
    Out[5]: 1
    
    In [6]: gen.next()    # 如果我们使用for循环去遍历生成器里的值,相当于执行多次next()方法
    Out[6]: 2

    我们自己写一个生成器:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    def fun():
        print('one')
        yield 1
        print('two')
        yield 2
        print('three')
        yield 3
    
    gen = fun()   # 因为函数里有yield语句,所以调用的时候函数不会被执行,只是返回一个生成器对象,只有使用next()方法才会被执行
    gen.next()    # 第一次会执行print('one'),然后在 yield 1 的位置中断,1是返回值(return),返回值后函数退出,并记录中断位置
    gen.next()    # 第二次会执行print('two'),然后在 yield 2 的位置中断,2是返回值(return),返回值后函数退出,并记录中断位置
    gen.next()    # 第三次会执行print('three'),然后在 yield 3 的位置中断,3是返回值(return),返回值后函数退出,并记录中断位置

    return 与 yield 区别:

    (1) return的时候这个函数的局部变量就都销毁了,所有return是得到所有结果之后的返回
    (3) yield是产生了一个可以恢复的函数(生成器),恢复了局部变量;生成器只有在调用 next() 时才运行函数生成一个结果

        

         

  • 相关阅读:
    python中的面向对象编程
    python global vs nonlocal (2)
    python3 nonlocal vs global
    poj蚂蚁问题
    C/C++ static vs global
    砝码问题
    Wythoff's game
    C++中的::operator new, ::operator delete
    客户信息表 自我汇总 待确认
    Oracle Savepoint
  • 原文地址:https://www.cnblogs.com/pzk7788/p/10296949.html
Copyright © 2020-2023  润新知