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__()獲取到的值仍然是空,所以就出現了前面的問題


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM