zoukankan      html  css  js  c++  java
  • 可迭代对象和生成器

    参考:

    https://blog.csdn.net/alvine008/article/details/43410079

    https://www.xncoding.com/2015/12/01/python/iterable.html

    一、迭代器iterables

    >>> mylist1 = [1, 2, 3]
    >>> for i in mylist:
    ...    print(i)
    1
    2
    3
    >>> mylist2 = [x*x for x in range(3)]
    >>> for i in mylist:
    ...    print(i)
    0
    1

    mylist1和mylist2都是 <class 'list'>, 它是迭代器iterables的一种。

    任何可用 for in 来迭代读取的都是迭代容器,例如lists,strings,files.这些迭代器数据都会提前进入内存,非常消耗内存,单其中很多值都完全没有必要每次都保持在内存中。

    二、Generators(生成器)

    #先对比迭代器
    mylist = [x*x for x in range(3)]
    print(type(mylist))
    输出:<class 'list'>
    print(mylist)  
    输出:[0, 1, 4]

    #对比生成器    
    mygenerator = (x*x for x in range(3))
    print(type(mygenerator))
    输出: <class 'generator'>
    print(mygenerator)
    输出:<generator object test1.<locals>.<genexpr> at 0x7fc2ea09efc0>
    for i in mygenerator:
    print(i)
    输出:
    0
    1
    4

    生成器几乎和迭代器是相同的,除了符号[]变为(),但生成器不会直接生成list,而是一个object,每次只取一个值。

    生成器可以用Yield实现,Yield的用法有点像return,除了它返回的是一个生成器,例如:

     

    def createGenerator():
    ...    mylist = range(3)
    ...    for i in mylist:
    ...        yield i*i

     

    和mygenerator = (x*x for x in range(3))的效果是一样的

     

  • 相关阅读:
    flex布局
    input框不能输入问题
    JS的innerHTML完成注册表
    CSS的z-index属性和box-shadow属性
    JS个人笔记
    css照片墙
    透明度设置
    a标签的name属性
    iframe标签
    title属性
  • 原文地址:https://www.cnblogs.com/lxgbky/p/12712361.html
Copyright © 2011-2022 走看看