裝飾器:本質是函式,(裝飾其他函式)就是為其他函式新增其他功能
原則:1.不能修改被裝飾函式的源**
2.不能修改被裝飾函式的呼叫方式
補充記憶體管理機制(函式即變數)
匿名函式沒有名字,定義之後馬上被銷毀,除非賦值給乙個變數
def text1():
print("text1")
text2()
def text2():
print("text2")
text1()
這個可以正常執行
def text3():
print("text3")
text4()
text3()
def text4():
print("text4")
這個會報錯(記住一點變數定義了即可用,若是沒有就不能用,函式也一樣,另外定義的函式體會當字串存在記憶體裡這就是為text1()可以執行)
什麼是高階函式(函式即變數)
a. 把函式名當作實參傳遞給另乙個函式(不修改函式源**,為其新增功能如下程式)
import time
def text():
time.sleep(3)
print("text")
def text2(func):
tstart=time.time()
func()
tstop=time.time()
print(tstop-tstart)
text2(text)
b.返回值中包含函式名(不修改函式的呼叫方式)
import time
def text1():
print('print in text1')
time.sleep(2)
def text2(text):
print(text)
print('print in text2')
return text
text2(text1)
print(text2(text1))
text1=text2(text1) //如果後面的text1加括號就是把返回值傳過去了
text1()
巢狀函式:就是函式內定義了另外的函式
高階函式+巢狀函式=裝飾器
下面是乙個簡單的裝飾器
import time
def timer(func):
def demo(*args,**kwargs):#這裡加*的意思是無論有沒有引數都可以使用這個裝飾器
tstart=time.time()
func(*args,**kwargs)//run text()
tstop=time.time()
print("this is the fuction run time %s"%(tstop-tstart))
return demo
@timer#text=timer(text)
def text():
time.sleep(3)
print('print in text')
text()
裝飾器 高階函式 閉包 函式巢狀
裝飾器 本質就是函式,作用是給其他函式新增新功能 1 不修改被修飾函式的源 2 不修改被修飾函式的呼叫方法 import time deftimmer func def args,kwargs start time time.time res func args,kwargs end time ti...
裝飾器2 高階函式 函式巢狀 閉包
高階函式定義 1.函式接受的引數是乙個函式名 2.函式的返回值是乙個函式名 3.滿足上訴條件任意乙個,都可稱之為高階函式 1 deftest 2print 你好啊 3 defhigh func func 4print 高階函式 5func 6high func test 7輸出 8高階函式 9 你好...
函式巢狀與裝飾器
應用場景,位置引數中代表將多個引數存入元祖,將關鍵字引數傳入字典 位置引數 位置形參 必須被傳值,一一對應 位置實參 按從左到右的順序與形參一一對應 關鍵字引數 按照key value形式指名道姓的為形參傳值,可以完全不按照順序 1.關鍵字實參必須在位置引數的後面 2.可以混用位置實參與關鍵字實參,...