迭代是Python最強大的功能之一,是訪問集合元素的一種方式。python
迭代器是一個能夠記住遍歷的位置的對象。函數
迭代器對象從集合的第一個元素開始訪問,直到全部的元素被訪問完結束。迭代器只能往前不會後退。spa
迭代器有兩個基本的方法:iter() 和 next()。code
>>>list=[1,2,3,4] >>> it = iter(list) # 建立迭代器對象 >>> print (next(it)) # 輸出迭代器的下一個元素 1 >>> print (next(it)) 2 >>>
在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。對象
跟普通函數不一樣的是,生成器是一個返回迭代器的函數,只能用於迭代操做,更簡單點理解生成器就是一個迭代器。ci
在調用生成器運行的過程當中,每次遇到 yield 時函數會暫停並保存當前全部的運行信息,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續運行。generator
調用一個生成器函數,返回的是一個迭代器對象。it
#!/usr/bin/python3 import sys def fibonacci(n,w=0): # 生成器函數 - 斐波那契 a, b, counter = 0, 1, 0 while True: if (counter > n): return yield a a, b = b, a + b # print('%d,%d' % (a,b)) counter += 1 f = fibonacci(10,0) # f 是一個迭代器,由生成器返回生成 #type(f) # <class 'generator'> while True: try: print (next(f), end=" ") except : sys.exit()
每次執行到有yield時,返回yield後面的值,而且函數會暫停,直到下次調用或迭代終止;class
yield後面能夠加多個數值(能夠是任意類型),但返回的值是元組類型的。import
如:yield m ,n ,l ,k ,p
當一個生成器函數被調用時,它返回一個生成器對象,而不用執行該函數。 當第一次調用next()
方法時,函數開始執行,直到它達到yield
語句,返回yield
值。 yield
保持跟蹤,即記住最後一次執行,而第二個next()
調用從前一個值繼續。