zoukankan      html  css  js  c++  java
  • 十一、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)
    =============================================================
     
  • 相关阅读:
    POI处理Excel工具类
    Mac打开隐藏文件夹
    markdown语法
    U盘分区合并
    数组
    Java插入到mysql数据库显示问号?
    使用vmware打开别人提供好的vmx没反应怎么办?
    求长方形的外接圆
    读取mysql数据库
    excel对列的常用操作
  • 原文地址:https://www.cnblogs.com/steven9898/p/11329372.html
Copyright © 2011-2022 走看看