1、迭代器 迭代是訪問集合元素的一種方式 迭代器是一個可以記住遍歷的位置的對象。 迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。 迭代器有兩個基本的方法:iter() 和 next()。 字元串,列表或元組對象都可用於創建迭代器: 實例1: 以上代碼,輸出 ...
1、迭代器
- 迭代是訪問集合元素的一種方式
- 迭代器是一個可以記住遍歷的位置的對象。
- 迭代器對象從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
- 迭代器有兩個基本的方法:iter() 和 next()。
字元串,列表或元組對象都可用於創建迭代器:
實例1:
basket = ['apple', 'orange', 'pear', 'banana'] it = iter(basket) # 創建迭代器對象 # 輸出迭代器的下一個元素 print(next(it)) # 輸出迭代器的下一個元素 print(next(it))
以上代碼,輸出:
apple
orange
實例2:
basket = 'abc' it = iter(basket) # 創建迭代器對象 print(next(it)) # 輸出迭代器的下一個元素 print(next(it)) # 輸出迭代器的下一個元素
以上代碼,輸出:
a
b
通常會和for語句搭配使用,如:
basket = 'abc' it = iter(basket) # 創建迭代器對象 for n in it: print(n)
以上代碼,輸出:
a
b
c
2、生成器
在 Python 中,使用了 yield 的函數被稱為生成器(generator)。
- 跟普通函數不同的是,生成器是一個返回迭代器的函數,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。
- 在調用生成器運行的過程中,每次遇到 yield 時函數會暫停並保存當前所有的運行信息,返回yield的值。併在下一次執行 next()方法時從當前位置繼續運行。
def fibonacci(n): # 生成器函數 - 斐波那契 a, b, counter = 0, 1, 0 while True: if counter > n: return yield a a, b = b, a + b counter += 1 f = fibonacci(10) # f 是一個迭代器,由生成器返回生成
什麼情況下需要使用 yield?一個函數 f,f 返回一個 list,這個 list 是動態計算出來的(不管是數學上的計算還是邏輯上的讀取格式化),並且這個 list 會很大(無論是固定很大還是隨著輸入參數的增大而增大),這個時候,我們希望每次調用這個函數並使用迭代器進行迴圈的時候一個一個的得到每個 list 元素而不是直接得到一個完整的 list 來節省記憶體,這個時候 yield 就很有用。