day 11 第一類物件、閉包、迭代器
阿新 • • 發佈:2019-01-10
課上總結
一.第一類物件
1.什麼是第一類物件?
在建立一個函式的時候,這個函式就是第一類物件,函式物件可以向變數一樣進行賦值操作,還可以作為列表的元素一樣使用. 第一類物件 -> 函式名 -> 變數名
比如:
def func(): print("我叫第一類物件") a = func print(a) #<function func at 0x00000000004C1E18> #列印的是記憶體地址 a() # 我叫第一類物件 #函式名可以進行賦值 func = 666 print(func) ###坑### 結果還是666,這裡的func被賦值給666
2.函式名可以放在一個列表裡多次呼叫
def func1(): print("朱元璋") def func2(): print("朱祁鎮") def func3(): print("王陽明") def func4(): print("魏忠賢") lst = [func1,func2,func3,func4] lst[0]() #結果:朱元璋 #單個函式呼叫 for i in lst: i() #結果: #用for迴圈實現多個函式呼叫 朱元璋 朱祁鎮 王陽明 魏忠賢
3.在外面呼叫內部函式
def warpper(): def inner(): print("哈哈哈") return inner #return返回給上一級的呼叫者warpper, inner後面不能加括號"()",這樣的話函式沒有返回值預設返回None,而且還是隻能通過外層函式才能呼叫 ret = warpper()() #結果:哈哈哈 #後面兩個括號代表,執行inner函式返回給warpper函式的函式名,讓warpper可以在外面直接呼叫巢狀的函式
4.函式可以作為"實參"多次呼叫,作為一個代理來使用,有點類似於裝飾器的雛形.
def func1(): print("謝晉") def func2(): print("朱元璋") def func3(): print("朱友文") #定義一個函式作為代理來使用,實現函式可以作為是 "實參" 多次呼叫. def proxy(a): print("我是代理") a() print("代理執行完畢") proxy(func1) proxy(func2) proxy(func3) #結果 我是代理 謝晉 代理執行完畢 我是代理 朱元璋 代理執行完畢 我是代理 朱友文 代理執行完畢
二.閉 包
1.什麼是閉包?
閉包就是內層函式對外層函式的使用.
2.閉包的優點:
保護變數不被侵害
讓變數常駐記憶體,方便下次呼叫,能夠更快的展示
閉包的缺點:
如果記憶體過大,可能導致記憶體溢位,或者記憶體被撐爆.
3.閉包的應用場景:
目前已知爬蟲,可以把一個url放入一個變數內,下次訪問這個url時就會走本地快取,快速訪問.
例:
圖