Python 裝飾器 ,閉包

2021-09-14 05:40:38 字數 1357 閱讀 4596

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也就沒有意義了,一定要返...