在學習裝飾器之前,請先學習內嵌函式和閉包,裝飾器其實就是閉包的特例,而閉包是內嵌函式實現的。學習內嵌函式與閉包:
例一: 實現多加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...