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