python中裝飾器的應用

2021-08-27 09:01:29 字數 2546 閱讀 2608

# 裝飾器的概念

- 裝飾器的實現是函式裡面巢狀函式;

- 裝飾器的本質是乙個函式, 它可以讓其他函式在不需要做任何**改動的前提下增加額外的功能;

- 裝飾器需要傳遞乙個函式, 返回值也是乙個函式物件.

# 裝飾器的應用場景

- 計時器

- 記錄日誌

- 使用者登入驗證

- 函式引數驗證

如圖所示,函式func1輸出時運用函式outer進行了裝飾

顯示結果為

import functools         #functools模組用於高階函式:作用與或者返回其它函式的函式。一般來說,對於該模組,任何可呼叫物件都可以視為乙個函式。  

import time                  #引入時間模組

#執行程式開始時間

res = fun(*args,**kwargs)

#執行程式

end_time = time.time()

# log('debug') 返回值:add_log

# add = add_log(add)

@log('debug')

def add(x,y):

time.sleep(1)

#延時一秒執行

return x+y

print add(1,2)

練習1# 編寫裝飾器required_types, 條件如下:

#     1). 當裝飾器為@required_types(int,float)確保函式接收到的每乙個引數都是int或者float型別;

#     2). 當裝飾器為@required_types(list)確保函式接收到的每乙個引數都是list型別;

#     3). 當裝飾器為@required_types(str,int)確保函式接收到的每乙個引數都是str或者int型別;

#     4). 如果引數不滿足條件, 列印 typeerror:引數必須為***x型別

import functools

return required

@required_types(str,str)

def add(a, b):

return a + b

print add('hello','python')

練習2需求:驗證使用者登陸的裝飾器is_login

1.如果使用者登陸成功,則執行被裝飾的函式

2.如果使用者登陸不成功,則執行登陸函式

"""import functools

login_users = ['admin', 'root']

@is_login

def writeblog(name):

return '編寫部落格'

def login():

return '登陸。。。'

print writeblog(name='admin')

練習3編寫裝飾器required_ints, 條件如下:

#     1). 確保函式接收到的每乙個引數都是整數;

#     2). 如果引數不是整形數, 列印 typeerror:引數必須為整形

import functools

@required_ints

def add(a, b):

return a + b

@required_ints

def mymax(a, b, c, d):

return max(a, b, c, d)

print mymax(1,2,3,4.0)

練習4"""

import functools

import time

@add_log

def add(x,y):

time.sleep(1)

return x+y

print add(1,2)

練習5帶有多個裝飾器的函式

# 需求: 使用者登陸驗證的裝飾器is_login

# #       1). 如果使用者登陸成功, 則執行被裝飾的函式;

# #       2). 如果使用者登陸不成功, 則執行登陸函式

# #需求: 判斷登陸使用者是否未管理員is_admin(此處管理員只有乙個為:admin使用者)

# #      1).如果使用者為管理員, 則執行被裝飾的函式;

# #      2).如果使用者不是管理員, 則報錯;

"""import functools

login_users = ['admin', 'root']

@is_login

@is_admin

def writeblog(name):

return '編寫部落格'

def login():

return '登陸。。。'

print(writeblog(name='root'))

python中裝飾器

對修改是封閉的,對擴充套件是開放的 import time def f1 print time.time print this is a function.def f2 print this is a function.print time.time f1 def print current tim...

python中裝飾器詳解

最新學了裝飾器,有乙個疑問一直困擾我,思考了幾天,終於明白。首先,展示正常的裝飾器 允許向乙個現有的物件新增新的功能,同時又不改變其結構,就是給函式穿個衣服,但是不改變函式 該如何寫?def log func print call s func.name return func args,kw 依照...

python中裝飾器理解

裝飾器 decorators 是 python 的乙個重要部分。簡單地說 他們是修改其他函式的功能的函式。他們有助於讓我們的 更簡短!由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 ...