類的學習筆記(3) 自定義裝飾器及裝飾器的理解

2021-09-01 00:21:50 字數 1063 閱讀 9556

在學習裝飾器之前,請先學習內嵌函式和閉包,裝飾器其實就是閉包的特例,而閉包是內嵌函式實現的。學習內嵌函式與閉包:

例一: 實現多加100

def fun1(x):

def fun2(y):

return x(y)+100

return fun2              #裝飾器

def ff(y):

return y*y           ff(4)=16

@fun1              此時fun1相當於執行了     ff= fun1(ff)  #x=ff

def ff(y):

return y*y          ff(4)=116

例二:  實現過濾非整數型的引數,使能夠實現多數相加

def filterarg(func):

def fit(*arg):

if len(arg) ==0:

return 0

for i in arg:

if not isinstance(i,int):

return 0

return func(*arg)

return fit                 #裝飾器

@filterarg

def sums(*arg):

return sum(arg)       *的作用是將多個引數整合成列表,是指能夠讓sum(arg)執行。注意,sum(arg)中只能傳乙個引數,這個引數可以是列表,sum([1,2,3])=6.   sum(1,2,3)報錯

def ff1(x):

def ff2(y):

return x(y)+1

return ff2

def ffn(m):

return m*m

ffn = ff1(ffn)   #相當於裝飾了,這個就相當於@ff1

'''執行結果:ffn(3)=10   ,相當於ffn(3)+1

如果t = ff1(ffn)  則 t(3)=10.此時t就是乙個函式物件,t() = ff2()

'''上面兩個例項僅僅供理解學習用,實際功能不大。

Shiro 學習筆記(3) 自定義 Realm

自定義的 realm 使得我們使用安全資料來源更加靈活,在自定義的 realm 中,我們就可以自己控制認證和授權的邏輯了。同時我們還簡單介紹了一下在多個 realm 同時存在的情況下,我們可以配置我們的認證策略來滿足我們的需求。前面兩節我們已經介紹過 inirealm 和 jdbcrealm,這一節...

python自定義裝飾器的情況(詳解

關於函式定義的單一裝飾器 一般的通用裝飾器 多個裝飾器的使用 帶有引數的裝飾器 類裝飾器 這是裝飾器的自定義和內部機制一些初識 先強調裝飾器的要求便是 不改變原來的函式 裝飾器就乙個函式引用引數 不改變呼叫方式 我先介紹一些閉包,因為裝飾器也是基於閉包來實現的,區別閉包和裝飾器的區別就可以看外層函式...

C 基礎學習筆記 自定義陣列模板類

內容 陣列模板類 修改 2017年9月13上午 成員方法中delete未正確匹配 改進 2017年9月13晚上 陣列總量改為固定 define crtdbg map alloc include include include arraytemplate.h include arr.h include...