学习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函数返回的,是一个“可迭代对象”。
这种对象,从数据结构上类似于单向链表, ob_1->bo_2->bo_3->....
循环取得对象中的值 ,实际上是会调用内部函数__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 "" ,line 1 , in
StopIteration
可见,该对象已经到了终点了,不能用了。