Python基礎之裝飾器

2021-10-11 00:16:22 字數 3919 閱讀 1404

器-》工具

裝飾-》新增新功能

裝飾器就是定義乙個函式,用該函式去為其他函式新增新功能

開放封閉原則:針對上線的功能對拓展是開放的,但是對修改源**以及呼叫方式是封閉的

裝飾器就是在遵循開放封閉原則的前提下為被裝飾物件新增新功能

1、不修改被裝飾物件的源**

1、不修改被裝飾物件的呼叫方式

# 需求:為index加上新功能-》統計其執行時間

# import time

## def index():

# time.sleep(1)

# print('from index')

## index()

# 方案1:

import time

defindex()

: start=time.time(

) time.sleep(1)

print

('from index'

) stop=time.time(

)print

('run time is %s'

%(stop - start)

)index(

)# 方案2:

import time

defindex()

: time.sleep(1)

print

('from index'

)start=time.time(

)index(

)stop=time.time(

)print

('run time is %s'

%(stop - start)

)# 方案3:

import time

defindex()

: time.sleep(1)

print

('from index'

)def()

: start=time.time(

) index(

) stop=time.time(

)print

('run time is %s'

%(stop - start)))

# 方案3.1

import time

defindex()

: time.sleep(1)

print

('from index'

)def

(f):

start=time.time(

) f(

)# 函式index的記憶體位址()

stop=time.time(

)print

('run time is %s'

%(stop - start)

)# 方案3.2

import time

defindex()

: time.sleep(1)

print

('from index'

)def

outter

(f):

# f=函式index的記憶體位址

def():

start=time.time(

) f(

)# 函式index的記憶體位址()

stop=time.time(

)print

('run time is %s'

%(stop - start)

)index=outter(index)

# outter(函式index的記憶體位址)

index(

)# 改進1

import time

defindex()

: time.sleep(1)

print

('from index'

)def

home

(name)

: time.sleep(2)

print

('home page,welecome %s'

%name)

defoutter

(f):

# f=函式home的記憶體位址

def(name)

: start=time.time(

) f(name)

# 函式home的記憶體位址(name)

stop=time.time(

)print

('run time is %s'

%(stop - start)

)# index=outter(index) # outter(函式index的記憶體位址)

# index()

home=outter(home)

# outter(函式home的記憶體位址)

home(

"egon"

)# 改進2

import time

defindex()

: time.sleep(1)

print

('from index'

)def

home

(name)

: time.sleep(2)

print

('home page,welecome %s'

%name)

defoutter

(f):

# f=函式home的記憶體位址

def(

*args,

**kwargs)

: start=time.time(

) f(

*args,

**kwargs)

# 函式home的記憶體位址(name)

stop=time.time(

)print

('run time is %s'

%(stop - start)

)# index=outter(index) # outter(函式index的記憶體位址)

# index()

# home=outter(home) # outter(函式home的記憶體位址)

# home("egon")

# 改進3 (終極改進)

import time

defindex()

: time.sleep(1)

print

('from index'

)def

home

(name)

: time.sleep(2)

print

('home page,welecome %s'

% name)

return

123def

outter

(f):

# f=函式home的記憶體位址

def(

*args,

**kwargs)

: start = time.time(

) res = f(

*args,

**kwargs)

# 函式home的記憶體位址(name)

stop = time.time(

)print

('run time is %s'

%(stop - start)

)return res

index = outter(index)

home = outter(home)

res = index(

)print

(res)

# none

res = home(

"egon"

)print

(res)

# 123

python基礎之裝飾器

裝飾器的本質是乙個閉合函式,該閉合函式的自由變數是乙個函式,可以使 的重要性與擴充套件性大大加強。通過 後新增裝飾器函式 def checkparams fn 只接受字串的裝飾器 if isinstance strname,str 判斷是否是字串型別 return fn strname 如果是則呼叫...

Python基礎之裝飾器

器即函式 裝飾即修飾,意指為其他函式新增新功能。裝飾器定義 本質就是函式,功能是為其他函式新增新功能。1.不修改被裝飾函式的源 開放封閉原則 2.為被裝飾函式新增新功能後,不修改被修飾函式的呼叫方式。不用傳引數來使用裝飾器。以下的操作是為函式foo來增加新的計時功能 不改變原函式的 和呼叫方式 im...

python基礎之裝飾器

裝飾器 本質就是函式,功能是為其他函式新增附加功能 原則 1.不修改被修飾函式的源 2.不修改被修飾函式的呼叫方式 裝飾器的知識儲備 裝飾器 高階函式 函式巢狀 閉包 高階函式 1.函式接收的引數是乙個函式名 2.函式的返回值是乙個函式名 3.滿足上述條件任意乙個,都可稱之為高階函式 以下 實現了為...