Python迭代器


一.迭代器

  迭代器指的是迭代取值的工具,迭代是指一個重復的過程,每一次重復都是基於上一次結果而來

  迭代提供了一種通用的不依賴索引的迭代取值方式

  一.可迭代對象

    但凡內置有__iter__方法的對象,都稱為可迭代對象,可迭代的對象:str,list,tuple,dict,set,文件對象

  二.迭代器對象

    1既內置又__next__方法的對象,執行該方法可以不依賴索引取值

    2.又內置有__iter__方法的對象,執行迭代器的__iter__方法得到的依然是迭代器本身

    迭代器一定是可迭代對象,可迭代對象不一定是迭代器對象,文件對象本身就是一個迭代器對象

  例如:執行可迭代對象下的__iter__方法,返回一個迭代器對象,在通過迭代器對象的__next__方法取值,如果取值次數超過源值的數量就會報錯

    

  執行結果:

    

  for循環本質為迭代器循環

  工作原理:

    1.先調用in后對象的__iter__方法,將其變成一個迭代器對象

    2.調用next(迭代器),將得到的返回值賦值給變量名

    3.循環往復直到next(迭代器)拋出異常,for會自動捕捉異常然后結束循環

  ps:可以從for的角度,分辨但凡可以被for循環取值的對象就是可迭代對象

  迭代器優點:

    1.提供了一種通用不依賴索引的迭代取值方式

    2.同一時刻在內存中只存在一個值,更節省內存

  迭代器缺點:

    1.取值不如按照索引的方式靈活,不能取指定的某一個值,只能往后取,不能往前去

    2.無法預測迭代器的長度

二.生成器

  生成器就是一種自定義的迭代器,本質為迭代器

  但凡函數內包含yield關鍵字,調用函數不會執行函數體代碼,會得到一個返回值,該返回值就是生成器對象

  例如:

    

  執行結果:

    

  總結yield:只能在函數內使用

    1.yield提供了一種自定義迭代器的解決方案

    2.yield可以保存函數的暫停的狀態

    3.yield對比return:相同點,都可以返回值,值得類型與個數沒有限制,不同點:yield可以返回多次值,而return只能返回一次值函數就會結束

三.生成器表達式

    

  類似於列表生成式

  執行結果:

    

四.內置函數

  python提供了許多的內置函數.在編程中提供了許多方便

  如下圖:

    

五.面向過程編程

  核心是過程二字,過程指的就是解決問題的步驟,即先干什么再干什么后干什么...
  基於該思想編寫程序就好比在設計一條流水線,是一種機械式的思維方式
  優點:復雜的問題流程化,進而簡單化
  缺點:可擴展性差


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM