什麼是Python中Iterator和'Lazy Iterator'的差別?

王林
發布: 2023-05-09 18:40:16
轉載
1325 人瀏覽過

在 Python 中,迭代器是一個對象,它使你能夠遍歷一個值的序列,例如一個列表或元組。它透過實作兩個方法來運作: __iter__() 和 __next__()。 __iter__() 方法傳回迭代器物件本身,而 __next__() 方法傳回序列中的下一個值。當沒有更多的值可以回傳時,它會引發一個 StopIteration 異常。

 標準自訂的iterator :

class Squares:
    def __init__(self, n):
        self.n = n
        self.current = 0
    
    def __iter__(self):
        return self
    
    def __next__(self):
        if self.current >= self.n:
            raise StopIteration
        else:
            result = self.current ** 2
            self.current += 1
            return result
 
# Using the iterator
squares = Squares(5)
for square in squares:
    print(square)
登入後複製

在 Python 中,iter() 是一個內建函數,它為給定的可迭代物件傳回一個迭代器。

一個可迭代的物件是任何可以被循環的對象,如列表、元組、集合、字典或定義了 __iter__() 方法的自訂對象。

當對一個可迭代對象呼叫 iter() 時,它會傳回一個迭代器對象,使用 next() 方法從可迭代對像一次提供一個數值序列。

iter()函數通常與迴圈和其他迭代器一起使用,以執行篩選、映射和減少一個序列的元素等任務。

用iter()函數建立的迭代器:

numbers = [1, 2, 3, 4, 5]
iterator = iter(numbers)
 
print(next(iterator))  # Output: 1
print(next(iterator))  # Output: 2
print(next(iterator))  # Output: 3
登入後複製

lazy iterator :

一個"懶惰迭代器"是一個特殊類型的迭代器,它不會預先產生序列中的所有值。相反,它在需要的時候產生它們。當處理非常大的或無限大的序列時,這很有用,因為它避免了一次產生所有的值和消耗大量的記憶體。

在Python中,懶惰迭代器經常使用生成器函數來實現(生成器是使用yield關鍵字的函數),一次傳回一個值。每次請求一個值的時候,生成器就在它離開的地方繼續工作,並產生序列中的下一個值。

# Define a generator function that yields values lazily
def fibonacci():
    a, b = 0, 1
    while True:
        yield a
        a, b = b, a + b
 
# Use the lazy iterator to print the first 10 Fibonacci numbers
fib = fibonacci()
for i in range(10):
    print(next(fib))
登入後複製

以上是什麼是Python中Iterator和'Lazy Iterator'的差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板