1. 程式人生 > 實用技巧 >迭代器 -range物件並不是

迭代器 -range物件並不是

  1. 實驗

# 可迭代物件就是你可以迭代的任何東西,而迭代器就是實際迭代的東西
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)


  1. 總結
Python 3 的 range 物件不是迭代器。 是惰性可迭代物件

1. 如果你知道你可以迴圈遍歷某個物件,這是一個可迭代物件(iterable)。

2. 如果你知道你正在迴圈遍歷的物件是在迴圈的時候計算出來,那麼這是一個惰性可迭代物件(lazy iterable)。

3. 如果你知道你可以傳遞一些東西給 next 函式,它就是一個迭代器(這是最常見的惰性可迭代物件)。

4. 如果你可以迴圈多次而不用「耗盡」它,它不是一個迭代器。

5. 如果你不能將某些東西傳遞給 next 函式,那麼它不是一個迭代器。