learing day 12
迭代器
什麼是迭代器? 器:工具 迭代:更新換代,迭代是一個重複的過程,但是每次重複都是基於上一次重複的結果
為什麼要用迭代器? 迭代器指的是迭代取值的工具
迭代器的優點:1.提供一種不依賴索引的取值方式 2.更節省記憶體
迭代器的缺點:1.不如按索引的取值方式靈活 2.取值是一次性的,只能向後next取,無法預測個數
.iter 是獲取自身,目的是保證for迴圈的規範
iter_d= iter(d) res = next(iter_d)
如何使用迭代器? 可迭代物件,但凡內建有_iter_方法的物件都稱之為可迭代物件 .__iter 除了數字其他都有 str\list\tuple\dict\set\檔案物件
迭代器物件:即內建有_iter_方法,又內建有_next_物件稱為都稱之為迭代器物件
即可迭代物件下_iter_方法,會有一個返回值,該返回值就是內建的迭代物件
for迴圈的底層原理
1.呼叫in後面的那個值/物件的_iter_方法,拿到一個迭代器物件iter_obj
2.呼叫迭代器物件iter_obj._next_()得到的返回值賦值變數名k,迴圈往復直到取值完畢丟擲異常StopIteration
3.捕捉異常結束迴圈
生成器:就是一種自定義迭代器
如何得到生成器:但凡函式內出現yield關鍵字,再呼叫函式不會立即執行函式體程式碼,會得到一個和返回值,這個返回值就是生成器物件
yield 1.提供一種自定義迭代器的解決方案
2.yield &return
相同點:都可以返回值,返回值沒有型別\個數限制
不同點:return只能返回一次值,yield卻可以讓函式暫停在某一個位置,可以返回多次值
def func():
print('')
yield
print(g=func())
next(g) 執行程式碼
遞迴呼叫與二分法:
1.函式的遞迴呼叫
在呼叫其他函式的過程中又直接或間接呼叫該函式本身,稱之為遞迴呼叫
遞迴必須滿足兩個條件:
1.沒進入下一次遞迴呼叫,問題的規模都應該有所減少
2.遞迴必須要有一個明確的結束條件
遞迴有兩個明確階段:
1.回溯 一層層呼叫下去
2.遞推 一層層推回去,推匯出結果