Python裝飾器實戰

2021-10-03 04:51:38 字數 2233 閱讀 4214

結論: 一般的裝飾器在裝飾api函式時登入驗證在上 鑑權在下, 意即, 先登入 再 鑑權

寫在前面閉包

閉包範例

def

out(func)

: variable =

'this is out variable'

definner()

:print

(variable)

func(

)return inner

函式裝飾器

import functools

defout

(*args,

**kwargs)

:def

out(func)

:@functools.wraps

(func)

definner

(*args,

**kwargs)

:return func(

)return inner

return out

# 常見的 如 fastapi flask 等定義介面的方式便是採用這種帶引數的裝飾器來規定請求方式的

@out

('post'

)def

func()

:pass

# 1.定義登入認證裝飾器

import functools

defauthenticated

(func)

:@functools.wraps

(func)

definner1

(*args,

**kwargs)

:print

('登入認證**'

) res = func(

*args,

**kwargs)

print

('登入認證後執行'

)return res

return inner1

# 2.定義鑑權裝飾器

defaccesstoken

(func)

:@functools.wraps

(func)

definner2

(*args,

**kwargs)

:print

('鑑權**'

) res = func(

*args,

**kwargs)

print

('鑑權後執行'

)return res

return inner2

@authenticated

@accesstoken

defapi()

:print

('api邏輯'

)return

api(

)

類裝飾器

類裝飾器比之函式裝飾器更好理解

class

decorator()

:def

__init__

(self, func)

: self._func = func

def__call__

(self,

*args,

**kwargs)

:return self._func(

*args,

**kwargs)

@decorator

deffunc

(x):

return x

import functools

class

decorator()

:def

__init__

(self, method=

none):

self._method = method

def__call__

(self, func)

:@functools.wraps

(func)

def(

*args,

**kwargs)

:return func(

*args,

**kwargs)

@decorator

('post'

)def

func

(x):

return x

Python之實戰裝飾器拆解

目錄 1.函式既 變數 屬於可變化資料 2.高階函式 3.巢狀函式 函式是無關順序的,但是執行呼叫的函式必須在執行 前面 示例 變數 a 1,2 a為變數名,1,2 存放記憶體裡面 專業稱之變數體函式 def test1 test1 該函式的名字 如變數名a 內的 1,2 存放在記憶體裡面 專業稱之...

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 函式的...