• 十一、yield生成器


    1、对比range 和 xrange 的区别
    >>> print range(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> print xrange(10)
    xrange(10)
    如上代码所示,range会在内存中创建所有指定的数字,而xrange不会立即创建,只有在迭代循环时,才去创建每个数组。
    ==========================================================
    def func1():
    return 1
    return 2
    return 3
    print (func1())
    问以上结果会打印什么?答案:只有1(因为当它遇到return时代表它的生命周期已经结束,就不会往下再走了)。
    现在我把它改变一下,变成这样,问以上结果会打印什么?
    答案:<generator object func1 at 0x02CF02D8>
    告诉你它是一个生成器,只有你通过for循环才能逐个去调用它
    def func1():
      yield 1
      yield 2
      yield 3
    print (func1())
     
    for i in func1():
    print (i)
    返回
    1
    2
    3
     
    就像
    for i in xrange(10)
    print (i)
    返回
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    因为xrange也是一个生成器
    ============================================================
    自定义生成器(实际上就是在做xrange的功能):
    def nrange(num):
        temp = -1
        while True:
            temp += 1
            if temp >= num:
                return
            else:
                yield temp
    for i in nrange(100): print(i)
    =============================================================
     
  • 相关阅读:
    ASP.NET中26种性能优化方法
    ASP.NET中常用的26个优化性能方法
    ASP.NET页面事件:顺序与回传详解
    ASP.NET控件属性大全
    ADO.NET数据库编程
    ado.net笔记
    98内存管理
    23个常用正则表达式(数值和字符串)
    web中用纯CSS实现筛选菜单
    Unity3D脚本:C#计时类脚本
  • 原文地址:https://www.cnblogs.com/steven9898/p/11329372.html
Copyright © 2020-2023  润新知