1,高階函式-裝飾器
閉包:1)存在於巢狀關係的函式中
2)巢狀函式引用外部函式變數
3)外部函式會將內部函式名作為返回值返回
1)裝飾器是乙個閉包
2)執行過程
3)外部函式執行後並沒有**
要被裝飾的函式,沒有引數,沒有返回值
def outer(func):
print(「開始裝飾」)
def inner():
print("------驗證------")
func()
print("------日誌------")
return inner
#裝飾器
@outer # test = outer(test) ==> test = inner
def test():
print("------test登入------")
test()
要被裝飾的函式,有引數,沒有返回值
def outer(func):
print(「開始裝飾」)
def inner(username,password):
print("------驗證------")
func(username,password)
print("------日誌------")
return inner
#裝飾器
@outer # test = outer(test) ==> test = inner
def test(username,password):
print("------test登入------",username,password)
test(「張三」,「123」)
要被裝飾的函式,沒有引數,有返回值
def outer(func):
print(「開始裝飾」)
def inner():
print("------驗證------")
print("------日誌------")
return func()
return inner
#裝飾器
@outer # test = outer(test) ==> test = inner
def test():
print("------test登入------")
return 「登入成功」
print(test(),"---------")
要被裝飾的函式,有引數,有返回值
def outer(func):
print(「開始裝飾」)
def inner(a):
print("------驗證------")
print("------日誌------")
return func(a)
return inner
#裝飾器
@outer # test = outer(test) ==> test = inner
def test(a):
print("------test登入------",a)
return 「登入成功」
print(test(「你好」),"---------")
多個裝飾器
執行順序:從下到上
def val(func):
print(「開始裝飾驗證」)
def inner():
print("------驗證------")
func()
return inner
def log(func):
print(「開始裝飾日誌」)
def inner():
func()
print("------日誌------")
return inner
#裝飾器
@log
@val # test = outer(test) ==> test = inner
def test():
print("------test登入------")
test()
函式高階(裝飾器)
python裝飾器本質上就是乙個函式,它可以讓其他函式在不需要做任何 變動的前提下增加額外的功能,裝飾器的返回值也是乙個函式物件 函式的指標 裝飾器函式的外部函式傳入我要裝飾的函式名字,返回經過修飾後函式的名字 內層函式 閉包 負責修飾被修飾函式。從上面這段描述中我們需要記住裝飾器的幾點屬性,以便後...
Python高階函式 裝飾器
由於函式也是乙個物件,而且函式物件可能被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2018 4 11 f now f 2018 4 11 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...
Python 高階函式 裝飾器
裝飾器 定義裝飾器本身是乙個可呼叫物件,接收乙個函式作為引數,然後將其返回或替換成另乙個函式或可呼叫物件。可以理解成,原來那是一堵白牆,經過了一層裝飾,這層裝飾可能是漆也可能把牆掏空鑲進一層 變得金光閃閃,最後呈現在你眼前的就是裝飾後的樣子。可以把它完全當成常規函式來呼叫,其引數是另乙個函式。裝飾器...