迭代器 -range物件並不是
阿新 • • 發佈:2020-11-22
- 實驗
# 可迭代物件就是你可以迭代的任何東西,而迭代器就是實際迭代的東西 my_iter = iter([1,2]) # 返回可迭代物件list的迭代器,就可以用next了 next(my_iter ) # 沒有元素就會返回錯誤 # range不是迭代器的理由 # 1 不能呼叫next # 2 可以遍歷一個 range 物件而不「消耗」它 my_iter = iter([1,2]) print(tuple(my_iter)) # (1, 2) print(tuple(my_iter)) # () my_range = range(2) print(tuple(my_range)) # (1, 2) print(tuple(my_range)) # (1, 2)
- 總結
Python 3 的 range 物件不是迭代器。 是惰性可迭代物件
1. 如果你知道你可以迴圈遍歷某個物件,這是一個可迭代物件(iterable)。
2. 如果你知道你正在迴圈遍歷的物件是在迴圈的時候計算出來,那麼這是一個惰性可迭代物件(lazy iterable)。
3. 如果你知道你可以傳遞一些東西給 next 函式,它就是一個迭代器(這是最常見的惰性可迭代物件)。
4. 如果你可以迴圈多次而不用「耗盡」它,它不是一個迭代器。
5. 如果你不能將某些東西傳遞給 next 函式,那麼它不是一個迭代器。