高階函式 裝飾器

2021-10-03 02:34:46 字數 2031 閱讀 8962

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 高階函式 裝飾器

裝飾器 定義裝飾器本身是乙個可呼叫物件,接收乙個函式作為引數,然後將其返回或替換成另乙個函式或可呼叫物件。可以理解成,原來那是一堵白牆,經過了一層裝飾,這層裝飾可能是漆也可能把牆掏空鑲進一層 變得金光閃閃,最後呈現在你眼前的就是裝飾後的樣子。可以把它完全當成常規函式來呼叫,其引數是另乙個函式。裝飾器...