一.迭代器
迭代器指的是迭代取值的工具,迭代是指一個重復的過程,每一次重復都是基於上一次結果而來
迭代提供了一種通用的不依賴索引的迭代取值方式
一.可迭代對象
但凡內置有__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提供了許多的內置函數.在編程中提供了許多方便
如下圖:
五.面向過程編程
核心是過程二字,過程指的就是解決問題的步驟,即先干什么再干什么后干什么...
基於該思想編寫程序就好比在設計一條流水線,是一種機械式的思維方式
優點:復雜的問題流程化,進而簡單化
缺點:可擴展性差