1. 程式人生 > >learing day 12

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.遞推    一層層推回去,推匯出結果