Python3 迭代器與生成器

迭代器

迭代是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()調用從前一個值繼續。

相關文章
相關標籤/搜索