python用迭代器 生成器完成斐波那契數列

2021-12-30 02:03:34 字數 1251 閱讀 3625

我們發現迭代器最核心的功能就是可以通過next()函式的呼叫來返回下乙個資料值。如果每次返回的資料值不是在乙個已有的資料集合中讀取的,而是通過程式按照一定的規律計算生成的,那麼也就意味著可以不用再依賴乙個已有的資料集合,也就是說不用再將所有要迭代的資料都一次性快取下來供後續依次讀取,這樣可以節省大量的儲存(記憶體)空間。

數學中有個著名的斐波拉契數列(fibonacci),數列中第乙個數為0,第二個數為1,其後的每乙個數都可由前兩個數相加得到,具體如下:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...

現在我們想要通過for...in...迴圈來遍歷迭代斐波那契數列中的前n個數。那麼這個斐波那契數列我們就可以用迭代器來實現,每次迭代都通過數學計算來生成下乙個數。

# 定義迭代器classfibonacci(object):

# num:表示生成fibonacci數列的個數def__init__(self, num):

self.num = num

# 儲存前兩個值

self.a = 0

self.b = 1

# 記錄生成數列的下標

self.current_index = 0def__iter__(self):returnself

# 生成下乙個資料def__next__(self):ifself.current_index < self.num:

result = self.a

self.a, self.b = self.b, self.a + self.b

self.current_index += 1returnresultelse:raisestopiteration

# 建立迭代器

fib = fibonacci(5)

# # 獲取迭代器中下乙個值

# result = next(fib)

# print(result)

# 直接遍歷迭代器forvalueinfib:

print(value)執行結果:

01123當然如果你了解到了yield的工作原理了,我們就可以用特殊的迭代器,也就是生成器來完成這個看似複雜的斐波那契的迭代了

Python 迭代器 生成器

可以直接作用於for迴圈的物件,統稱為可迭代物件 iterable。iterator物件表示的是乙個資料流,iterator物件可以被next 函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷...

python 迭代器,生成器

什麼事迭代 可直接用作與for迴圈的物件統稱為可迭代物件 可以被next 函式呼叫,並不斷返回下乙個值的物件稱為迭代器,所有的iterable均可以通過內建函式iter 來轉變為iterator。對於迭代器來講,有乙個next 就夠了。在你使用for和in語句時,程式就會自動呼叫即將被處理的物件的可...

python 迭代器 生成器

知識背景 1 呼叫乙個普通的python函式時,一般是從函式的第一行 開始執行,結束於return語句 異常或者函式結束 可以看作隱式的返回none 2 一旦函式將控制權交還給呼叫者,就意味著全部結束。函式中做的所有工作以及儲存在區域性變數中的資料都將丟失 3 再次呼叫這個函式時,一切都將從頭建立。...