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

    generator

    1.生成器函数:

           函数中有yield的就是生成器函数,执行生成器函数得到一个生成器,生成器具备生成某些东西的能力

           yield具有返回值,退出函数体,保留进度的功能,下次调用__next__功能继续从当前位置开始执行

    2.生成器:

           生成器函数的产物

    3.生成器的意义:

           python2.7中的xrange就是一个生成器函数,但是在3.6中已经被移除

    1 #!/usr/bin env python
    2 # -*- coding:utf-8 -*-
    3 # python 2.7
    4 print(range(10))
    5 print(xrange(10))
    6 '''
    7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    8 xrange(10)
    9 '''

        其意义在于:range(10)会在内存中一次性生成10个元素,而xrange(10)却得到一个生成器,在需要用的时候再生成某个元素,节约内存

    4.在python3中用生成器实现xrange函数

     1 def xrange(n):
     2     print('start')
     3     start = 0
     4     while start < n:
     5         yield start
     6         start += 1
     7  
     8 obj = xrange(5)
     9 n1 = obj.__next__()
    10 n2 = obj.__next__()
    11 n3 = obj.__next__()
    12 n4 = obj.__next__()
    13 n5 = obj.__next__()
    14 n6 = obj.__next__()
    15 #n7 = obj.__next__()
    16 print(n1, n2, n3, n4, n5, n6)

    5.生成器执行流程

    6、yelid与__next__

    1 # next每遇到一次yield将执行yield以上的程序,
    2 # 然后yield后面的值返回,并记录程序运行的位置
    3 # 等待下一次的__next__和下一次的yield
    4 # yield的作用保存上次执行的状态

     

    
    
    
  • 相关阅读:
    vector::reserve()对迭代器的影响
    C#日期格式转换大全
    aa
    C#中取到当前日期是在一年中的第几周
    EasyUI
    使用Ajax传递 json数据,并在一般处理页面进行接收全过程
    C#操作海量数据(Oracle、SQL Server)
    UE4教程
    游戏引擎的原理及应用
    C++基础02 (数组、函数、指针、结构体)
  • 原文地址:https://www.cnblogs.com/Acekr/p/7467631.html
Copyright © 2011-2022 走看看