1.函式無引數,無返回值
importtime
def f1(): #
無引數,無返回值
time.sleep(1)
print("
hello, world!")
def timer(f): #
f 是函式名
def inner(): #
閉包 start =time.time()
f()end =time.time()
total = end -start
(total)
return
inner
f1 = timer(f1) #
呼叫timer()函式,獲取inner函式名指向的記憶體位址的返回值
f1()
2.函式有返回值,無引數
importtime
def f1(): #
無引數,有返回值
time.sleep(1)
print("
hello, world!")
return
true
def timer(f): #
f 是函式名
def inner(): #
閉包 start =time.time()
ret =f()
end =time.time()
total = end -start
(total)
return
ret
return
inner
f1 = timer(f1) #
呼叫timer()函式,獲取inner函式名指向的記憶體位址的返回值
ret =f1()
print(ret)
3.函式有引數,有返回值
def f1(a, **kwargs): #引數,返回值 *args和**args可以組成任意型別的引數
time.sleep(1)
print("
hello, world!
", a, kwargs)
return
"abc
"def timer(f): #
f 是函式名
def inner(*args, **kwargs): #
閉包 start =time.time()
ret = f(*args, **kwargs)
end =time.time()
total = end -start
(total)
return
ret
return
inner
f1 = timer(f1) #
呼叫timer()函式,獲取inner函式名指向的記憶體位址的返回值
ret = f1(1, name='
tom'
)print(ret)
在不改變函式呼叫方式的情況下,在原函式的前後新增功能
開放:對擴充套件開放
封閉:對修改封閉
這是裝飾器開發的原則
簡化**
importtime
def timer(f): #
f 是函式名
def inner(*args, **kwargs): #
閉包 start =time.time()
ret = f(*args, **kwargs)
end =time.time()
total = end -start
(total)
return
ret
return
inner
@timer
#f1 = timer(f1),語法糖簡化**
def f1(a, **kwargs): #
引數,返回值 *args和**args可以組成任意型別的引數
time.sleep(1)
print("
hello, world!
", a, kwargs)
return
"abc
"ret = f1(1, name='
tom'
)print(ret)
裝飾器
def inner(*args, **kwargs):
#在原函式(被裝飾)前增加的功能
ret = f(*args, **kwargs) #
被裝飾的函式
#在原函式(被裝飾)後增加的功能
return
ret
return
inner
#def f1(*args, **kwargs):
print("
hello world!
", args, kwargs)
return
args
ret = f1('
a', '
b', name='
tom') #
f1指向的記憶體位址是inner指向的記憶體位址
print(ret)
巧記:1.先定義函式,再定義內部函式,返回內部函式的函式名
2.內部函式內放被裝飾的函式,傳進被裝飾函式的函式名
3.被裝飾的引數需要引數和返回值
ps:引數的傳遞:接收聚合,呼叫打散
初識函式 裝飾器
def inner args,kwargs 執行原函式之前的操作.ret func 執行原函式之後的操作.return ret return inner login status def auth func def inner args,kwargs if login status flag ret...
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
python裝飾器 裝飾器
由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...