python中,map()對象,只能循環遍歷一輪,之后為空的原因


學習python,按照之前編程的思路,寫了如下代碼

A_object = map(str,range(3))

A_list = list(A_object)

B_list = list(A_object)

觀察A_list,其值為  ['1','2','3']

觀察B_list,其值為  []

也就是說,A_list獲取了一次A_object的值后, A_object就變為空了。

這是為何呢?

 

后來找了下資料,發現原因了。

這是由於,map函數返回的,是一個“可迭代對象”。

這種對象,被訪問的同時,也在修改自己的值。 類似於 a = a+1 ,這樣。對於map來說,就是每次訪問,都把自己變為List中的下一個元素。

循環取得對象中的值 ,實際上是會調用內部函數__next__,將值改變,或者指向下一個元素。

當多次調用,代碼認為到達終點了,返回結束,或者__next__指向空,此時可迭代對象(鏈表) 就算到終點了,不能再用了。

 

類似於 list(A_object) 或者 for num in A_object 這樣的語句,就是調用了迭代器,執行了__next__,消耗了迭代對象。所以,再次使用A_object后,會發現它已經空了。

 

實驗:

>>A_object = map(str,range(3))

>>num = A_object.__next__()

>>num

'0'

>>num = A_object.__next__()

>>num

'1'

>>A_list = List(A_object)

>>A_list

['2']

#此時,A_object已經指向最末尾,空元素了。再次調用next試試

>>num = A_object.__next__()

Traceback( most recent call last):

 Filr "<stdin>" ,line 1 , in <module>

StopIteration

可見,該對象已經到了終點了,不能用了。

 


免責聲明!

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



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