上節回顧
裝飾器有參裝飾器
無參裝飾器
語法糖wraps裝飾器
什麼時候需要使用到裝飾器:
1.要增加新功能,但是不能修改源**和呼叫方式
2.實際開發時,用得最多的就是,將一段公共**提取到裝飾器(登入驗證)
裝飾器使用到的知識點:
閉包函式
函式物件
命名空間 作用域
語法糖函式巢狀
01迭代器
什麼是迭代器(iterator):
器指的是某種工具
迭代指的是更新換代的過程,例如應用程式的版本更新 從1.0變成了1.1
可迭代物件:
指的就是可以使用迭代器取出資料的物件
如何判斷乙個物件是否可迭代,就看這個物件是否提供迭代器,通過物件呼叫__iter__()來檢視
檔案也是可迭代物件
帶有__開頭__結尾的方式都是內建的特殊方式,會在某個時間自動執行
所有的容器型別(包括字串)都是可迭代的
對於for而言 所有的物件都需要先判斷是否是乙個可迭代物件
迭代器總結:
迭代器是一種通用的取值工具
只要具備__iner__()方法的物件才能被迭代器,稱之為可迭代兌現
迭代器是為了取值,只要具備next方法的就是迭代器
python中迭代器同時劇本iter方法和next方法的, 呼叫iter將返回迭代器
為什麼用迭代器:
統一方式
如何使用迭代器:
1.通過呼叫物件的__iter__()方法得到迭代器
2.通過迭代器的__next__()方式來獲取每乙個值
判斷乙個物件是不是迭代器:
迭代是為了取值,取值使用next方法,那麼只要物件具備next就稱之為迭代器
其中,檔案型別比較特殊,它既是迭代器 又是可迭代物件
迭代器物件乙個是乙個可迭代物件
可迭代物件不一點是迭代器
02生成器
什麼是生成器
generator
生成資料的工具
生成是從無到有的過程
工具可以直接看成是函式,我們可以自己來定義乙個函式來產生資料,但是每次執行函式都只能產生一次資料
生成器的目的就是可以多次(不斷的)生成資料
在python中生成器就是乙個函式
但是函式內部具備至少乙個yield關鍵字
反過來只要函式**現了yieldname該函式就是乙個生成器
關鍵字 yield
一旦函式彙總出現了yield,呼叫函式是就不好立即執行函式體.並且會返回乙個生成器物件
當呼叫生成器的next方法時,會執行函式體,但是如果執行期間遇到了yield 函式就是暫停執行
每一次呼叫next都是繼續上一次yiled的位置繼續往下執行,同時會將yield後的資料返回值呼叫者
yield 與returen的區別
都能返回乙個值
不同之處在於:return值只要執行return函式就整體結束了
而yield可以返回多次值 並且會在返回後將行暫停
生成器就是迭代器:
生成器同時具備iter個nxet函式,足以證明其就是乙個迭代器,所以可以直接使用for 老便利
迭代器就是通過生成器顯示的
跌大氣,生成器 for之間的關係
for的原理是使用迭代器取值
迭代器是通過生成器實現的
了解知識點:
yield的特殊用法
當你的生成器中需要外界資料參與時,生成器如何接受外界刺激?
閉關和引數都能傳資料到生成器中.但是只能接受一次值,如果要想多次傳值就需要使用send函式了
send函式用於向生成器傳送資料,但是要注意必須先進行初始化,也就是先呼叫一次__next__(方法)
總結迭代器?
for迴圈的實現原理
內部就是在獲取迭代器,不斷的呼叫next幫你取值,取到沒有值為止
可迭代物件 就是擁有__iter__的物件
生成器為了不斷的產生資料
迭代器就是通過生成器實現的
生成器的本質是乙個函式 但是其中包好了yield關鍵字
03面向過程程式設計
是一種程式設計思想,同樣的在程式設計界不只有這一種程式設計思想,還有物件導向等
程式設計思想沒有高低之分,只有適合不適合
你要思考的是什麼樣的應用程式應該採用哪種程式設計思想
核心在於過程,指的是在程式設計時時刻想著過程
過程指的是,第一步該幹什麼第二步幹什麼,完成這個任務需要哪些步驟以及每個步驟要幹什麼
面向過程程式設計思想的優點與缺點:
優點:可以將乙個複雜的大問題,拆分為簡單的小問題 (將複雜的問題簡單化,流程化)
缺點: 牽一發需要動全身 擴充套件性極差,正因為如此 才有了新的變成思想 即物件導向
使用場景:對於一些對擴充套件性要求不高的應用程式,建議採用面向過程 例如系統核心 shell指令碼程式
後期我們發開的應用程式是直接面向使用者的,需求變化非常頻繁,所以這個時候就需要使用物件導向了
day14 迭代器和生成器
迭代器和生成器 迭代器可迭代協議 含有iter方法的都是可迭代的 迭代器協議 含有next和iter的都是迭代器 特點節省空間 方便逐個取值,乙個迭代器只能取一次.生成器生成器函式 含有yield關鍵字的函式都是生成器函式 生成器函式的特點 呼叫之後函式內的 不執行,返回生成器 每從生成器取乙個值就...
生成器 迭代器
最近見天一直在看廖大的python教程,卻發現很多基礎看著很簡單,但卻不會應用,歸根結底還是因為理解不到位,故而又將教程學了一遍,並將自己的理解記錄一下,也方便後面查閱。由於沒有相關程式設計基礎,有些理解可能是錯的,敬請批評指正。想深入具體學習廖大部落格請移步廖雪峰的官方 有時候用迴圈生成列表太過繁...
迭代器,生成器
迭代器 生成器 生成器的第1種實現方式 列表生成式改為生成器 python中yield關鍵字 函式中如果有yield,那麼呼叫這個函式的返回值為生成器。當生成器g呼叫next方法,執行函式,知道遇到yield就停止 再執行next,從上一次停止的地方繼續執行 函式中遇return直接退出,不繼續執行...