#帶有__開頭__結尾的方法都是內置的特殊方法,會在某個時間自動執行迭代器:for循環的實現原理 內部就是在獲取迭代器,不斷的調用next 幫你取值,知道沒有值可取位置什麼是迭代器(iterator) 器指的是某種工具 迭代,指的是更新換代的過程,例如應用程序的版本更新從1.0變成1.1再到1.2 迭代的目的是要根據上一個結果,產生下一個結果,這是一個重複的過程,但不是單純的重複迭代器就是一種根據上一個結果獲得下一個結果的工具,簡單的說就是一種獲取數據的工具可迭代對象 指的就是可使用迭代器取出數據的對象, 如何判斷一個對象是否可迭代,就看這個對象是否提供了迭代器,經過對象調用__iter__()來獲取迭代器可迭代類型:全部的容器類型(包括字符串)都是可迭代的 文件也是可迭代對象,自身就是一個迭代器迭代器的使用: 1.經過調用對象的__iter__()方法獲得迭代器 2.調用迭代器的__next__()方法來獲取每個值如何判斷一個對象是否是迭代器? 迭代是爲了取值,取值使用next方法,那麼只要對象具有next方法就稱之爲迭代器 其中文件類型比較特殊既是可迭代對象,也是迭代器對於for而言全部的對象都須要先判斷是不是一個可迭代對象迭代器總結: 迭代器是一種通用的取值工具 只有具有__iter__()方法的對象才能被迭代器取值,稱之爲可迭代對象 迭代器是爲了取值,只要具有next方法的就是迭代器 python中迭代器同時具有iter方法和next方法 調用iter將返回迭代器自身 每一種數據類型內部的迭代實現都各不相同爲什麼使用: 統一取值方式如何使用: for...可迭代對象就是擁有iter的對象迭代器必定是可迭代對象可迭代對象不必定是迭代器生成器 (generator) 生成數據的工具 生成是從無到有的過程 工具能夠直接當作是函數,咱們能夠本身定義一個函數來產生數據,可是每次執行函數都只能產生一次數據 生成器的目的就是能夠屢次(不斷的)生成數據在python中生成器就是一個函數 可是函數內部具有至少一個yield關鍵字 反過來只要函數中出現了yield那麼該函數就是一個生成器yield關鍵字 一旦函數中出現了yield,調用函數時就不會當即執行函數體,而且會返回一個生成器對象 當調用生成器的next方法時會執行函數體,可是若是執行期間遇到了yield函數就會暫停執行 每一次調用next 都是從上一次yield的位置繼續往下執行,同時會將yield後的數據返回給調用者 yield與return的區別 都能返回一個值 不一樣之處在於:return 只返回一次值,只要執行return函數就總體結束了 而yield能夠返回屢次值,而且會在返回後將函數暫停住生成器就是迭代器 生成器同時具有iter和next函數,足以證實其就是一個迭代器,多以能夠直接使用for循環來遍歷 迭代器就是經過生成器實現的生成器,迭代器,for之間的關係 for的原理是使用迭代器取值 迭代器是經過生成實現的瞭解知識點:yield的特殊用法 當你的生成器中須要外界數據參與時,生成器中如何接受外界數據? 閉包和參數都能傳數據到生成器中,可是都只能接受一次值,若是想要屢次傳值就要使用send函數了 send函數用於向生成器發送數據,可是要注意必須先進行初始化,也就是先調用一次__next__()方法面向過程編程 是一種編程思想,一樣的在編程界不僅有這一種編程思想,還要面向對象編程 編程思想沒有高低之分,只有適合與不適合 核心在於過程,指的是在編程時時刻想着過程 面向過程編程思想的優勢與缺點 優勢:能夠將一個複雜的大問題,拆分爲簡單的小問題 將複雜的問題簡單化,流程化 缺點:牽一髮動全身,擴展性極差,正因如此,纔有了新的編程思想,即面向對象 使用場景:對於一些對擴展性要求不高的應用程序,建議採用面向過程,例如系統內核 後期咱們開發的應用程序大多都是直接面向用戶的,需求變化很是頻繁,這時就須要使用面向對象了