乙個擁有__iter__
方法的物件,可以使用for迴圈遍歷
可迭代物件有:str
、list
、tuple
、dict
、set
、iterator
、generator
、file
# 判斷乙個物件是否可迭代
>>> from collections import iterable
>>> isinstance('abc', iterable)
true
>>> isinstance(100, iterable)
false
>>> from collections import iterator
>>> isinstance([1,2], iterator) # 列表不是迭代器
false
>>> isinstance((1,2), iterator)
false
>>> isinstance([i for i in range(10)], iterator)
false
>>> isinstance((i for i in range(10)), iterator)
true
>>> a = (i for i in range(3))
>>> next(a)
0>>> next(a)
1>>> next(a)
traceback (most recent call last):
file "", line 1, in nameerror: name 'a' is not defined
>>> f = open('1.txt')
>>> isinstance(f, iterator) # 檔案是可迭代物件、也是迭代器
>>> true
# list、dict、str等雖然是可迭代物件,但不是迭代器,可以使用iter()函式轉化
>>> isinstance('abc', iterator)
false
>>> isinstance(iter('abc'), iterator)
true
for迴圈遍歷iterable的本質: 通過iter()函式獲取iterable的迭代器,然後對獲取到的迭代器不斷呼叫next()函式獲取下乙個值,當遇到stopiteration的異常時迴圈結束
把乙個列表生成式的中括號改為
()
帶有yield
的函式
>>> li = [i for i in range(10)] # 列表生成式
>>> li
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> gen = (i for i in range(10)) # 迭代器
>>> gen
at 0x00000161109100f8>
>>> next(gen)
0>>> next(gen)
1
實現斐波那契數列
def fib(max):
a, b, n = 0, 1, 0 # n表示數列的長度
while n < max:
# a, b =b, a+b
t = a + b
a = b
b = t
n += 1
yield a
num = fib(4)
print(next(num)) # 1
print(next(num)) # 1
print(next(num)) # 2
print(next(num)) # 3
print(next(num)) # stopiteration error
PYTHON 迭代器 可迭代物件
通過重複執行的 處理相似的資料集的過程,並且本次迭代的處理資料要依賴上一次的結果繼續往下做,上一次產生的結果為下一次產生結果的初始狀態,如果中途有任何停頓,都不能算是迭代。1 非迭代例子 loop 0 while loop 3 print hello world loop 1 2 迭代例子 loop...
python迭代 可迭代物件與迭代器物件
問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...
迭代器 可迭代物件 迭代器物件
今天的學習內容有 迭代器 可迭代物件 迭代器物件 for迴圈內部原理 生成器和生成器表示式 面向過程程式設計 迭代就是指更新換代的過程,要重複進行,而且每次的迭代都必須基於上一次的結果。我們使用for迴圈的時候就是把元素從容器裡乙個個取出來,這種過程其實就是迭代。迭代器 迭代取值的工具。迭代器的作用...