1:裝飾器 :不改變被裝飾的函式情況下附加一些功能
本質是函式, 用於裝飾其他函式, 附加一些本身所沒有的功能
實質: 是乙個函式
引數:是你要裝飾的函式名(並非函式呼叫)
返回:是裝飾完的函式名(也非函式呼叫)
作用:為已經存在的物件新增額外的功能
特點:不需要對物件做任何的**上的變動
例1:計算執行時長
import time
def hx(f): #裝飾器的函式,f接受被裝飾的函式名
def neibu(): #裝飾內部函式
start=time.time()
f() #呼叫被裝飾的函式
end=time.time()
print(end-start)
return neibu #裝飾器返回內部函式。(內部代表的是包裝盒)
@hx #@加函式名,代表下面的函式被hx裝飾
def jisuan():
print('12143')
jisuan()
例2:
import time
def dd(func):
def nb(cs):
print('**')
func(cs)
print('**')
return nb
def cc(func):
def nb(cs):
print('#########')
func(cs)
print('#########')
return nb
@cc@dd
def ych(name):
print(name,'開演唱會')
ych('周杰倫')
輸出:
#########
**周杰倫 開演唱會
**#########
2,閉包
閉包三條件。裝飾器裡有閉包
1包含內部函式的函式
2內部函式使用了外部函式的變數
3返回內部函式名
def hanshu(b): #1,包含內部函式的函式
a=3def nb(c): #閉包
d=a*b+c # 3,內部函式使用了外部函式的變數
return d
return nb #2,返回內部函式名
x=hanshu(4)
print(x(5))
print(x(6))
print(hanshu(4)(5)) #輸出17 4為外部函式變數 ,5 為內部函式變數
輸出:
1718
17
python裝飾器和閉包
下面幾個部落格有裝飾器的講解,也包含了裝飾器幾種情況的例子,比如說被裝飾的函式帶引數,裝飾器本身帶引數等。理解python中的裝飾器 python裝飾器學習 例子 其實裝飾器跟設計模式中的裝飾器模式基本一樣,就是在已有的函式上新增新的功能,這也是自己對裝飾器的一點簡陋的理解了。下面是自己寫的簡單例子...
python閉包和裝飾器
要理解裝飾器,就要明白閉包 要明白閉包,首先就要從高階函式和作用域說起 說道作用域,一般會談到legb規則。所謂的legb l locals,當前命名空間 區域性作用域 e enclosing,外部函式的命名空間 外部作用域 g global,全域性的命名空間 b bulit in,內建的命名空間平...
python閉包與裝飾器
首先閉包函式我的理解是,乙個函式內可以巢狀定義乙個函式,並將巢狀定義的函式返回 如果不返回執行完函式物件也就銷毀了 巢狀函式可以接收外部函式的引數,不同引數就可以變更巢狀函式的功能,返回不同功能的巢狀函式物件。以下是閉包函式簡單示例,如果inner函式不接收outer的引數x也就沒有意義了,一定要返...