• python3中的map对象返回的是迭代器,该迭代器用list()转列表之后,再次用list()转化时会返回空


    练习代码的时候,发现python3中的map()函数返回的可迭代对象,在用list()转成列表之后,再次用list()转列表的时候,获取的是空值(如下所示),所以查了一下python3的map()对象

    >>> rList = [1,2,3,4,5]
    >>> resultList = map(lambda x: str(x), rList)
    >>> resultList
    <map object at 0x0000021E91BFEEB8>
    >>> list(resultList)
    ['1', '2', '3', '4', '5']
    >>> list(resultList)
    []

    python3中的map方法返回的是一个迭代器:

     迭代器在遍历取值时,每取一个值时,会调用内置的__next__方法指向下一个元素:

    >>> resultList
    <map object at 0x0000021E91BFEEB8>
    >>> rList = [1,2,3,4,5]
    >>> resultList = map(lambda x: str(x), rList)
    >>> resultList.__next__
    <method-wrapper '__next__' of map object at 0x0000021E91F2A978>
    >>> resultList.__next__()
    '1'
    >>> resultList.__next__()
    '2'
    >>> resultList.__next__()
    '3'
    >>> resultList.__next__()
    '4'
    >>> resultList.__next__()
    '5'
    >>> resultList.__next__()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    StopIteration
    >>> resultList.__next__()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    StopIteration

    那么在用list()方法转列表的时候,每转化一个元素时都会调用一次迭代器的__next__()方法,转化完之后,__next__对象指向的就是空了,

    那么在此用list()转列表的时候,每一次用__next__()获取到的值仍然是空,所以就出现了前面的问题

  • 相关阅读:
    ie6 fixed 实现
    javascript 数组 prototype疑问
    深入了解CLR的加载过程
    sql
    关于 vue2.x 的 $attrs 和 $listeners
    VS Code 状态栏颜色修改
    vueelementadmin 安装第三包(npm install)时报错
    前端 JS 问题记录
    浏览器调试工具调试css样式
    浏览器调试固定鼠标悬浮的样式
  • 原文地址:https://www.cnblogs.com/xiaxiaoxu/p/11979179.html
Copyright © 2020-2023  润新知