Python之裝飾器的使用

2021-09-25 03:20:05 字數 2859 閱讀 7922

一、裝飾器

裝飾器:把乙個函式當作引數,返回乙個替代版的函式,本質就是乙個返回函式的函式

作用:在不改變原函式的基礎上,給函式增加功能

二、裝飾器的實現

(1)包含可變引數的裝飾器

import time

def decorator(func): #定義裝飾器

print(time.time())

func(*args,**kwargs)

@decorator #使用@語法糖的方式呼叫

def f1():

print('this is a function')

f1() #呼叫函式

(2)包含關鍵字的裝飾器

練習:用裝飾器實現乙個函式計時器

import random

import string

import functools

li = [random.choice(string.ascii_letters) for i in range(100)]

def timec(fun):

"""這是乙個裝飾器timec"""

@functools.wraps(fun)

#args:元組 kwargs:字典

#函式執行前

start_time = time.time()

res = fun(*args,**kwargs)

end_time = time.time()

print('執行時間為: %.6f' %(end_time - start_time))

return res

@timec

def con_add():

"""這是乙個con_add函式"""

s = ''

for i in li:

s += (i + ',')

print(s)

@timec

def join_add():

print(','.join(li))

con_add()

join_add()

print(con_add.__doc__) #幫助文件

print(con_add.__name__) #函式名稱

練習:建立裝飾器, 要求如下:

1. 建立add_log裝飾器, 被裝飾的函式列印日誌資訊;

import functools

def add_log(fun):

@functools.wraps(fun)

start_time = time.time()

res = fun(*args,**kwargs)

end_time = time.time()

%(time.ctime(),fun.__name__,end_time - start_time,res))

return res

@add_log

def add(x,y):

time.sleep(1)

return x + y

add(1,2)

練習:使用者管理,root使用者可新增或刪除資訊,其他使用者則返回許可權不允許

import functools

import inspect

def is_admin(fun):

@functools.wraps(fun)

#inspect.getcallargs返回乙個字典,key值:形參 value值:對應的實參

inspect_res = inspect.getcallargs(fun,*args,**kwargs)

print('inspect的返回值: %s' %inspect_res)

if inspect_res.get('name') == 'root':

res = fun(*args,**kwargs)

return res

else:

print('permission denied!')

@is_admin

def add_student(name):

print('新增學生資訊')

def del_student(name):

print('刪除學生資訊')

python裝飾器介紹 Python之裝飾器簡介

python函式式程式設計之裝飾器 1.開放封閉原則 簡單來說,就是對擴充套件開放,對修改封閉。在物件導向的程式設計方式中,經常會定義各種函式。乙個函式的使用分為定義階段和使用階段,乙個函式定義完成以後,可能會在很多位置被呼叫。這意味著如果函式的定義階段 被修改,受到影響的地方就會有很多,此時很容易...

python 找到裝飾器 Python之裝飾器

裝飾器本質上就是乙個python函式,他可以讓其他函式在不需要做任何 變動的前提下,增加額外的功能,裝飾器的返回值也是乙個函式物件。裝飾器的作用 在不改變原函式及原函式的執行的情況下,為原函式增加一些額外的功能,比如列印日誌 執行時間,登入認證等等。乙個簡單的裝飾器 import time def ...

Python之裝飾器

裝飾器就是乙個以函式作為引數並返回乙個替換函式的可執行函式 即裝飾器是乙個函式,其引數為函式,返回值也為函式 可理解為對函式的功能進行拓展,所以叫裝飾 outer為裝飾器,效果為給被裝飾函式返回值結果加負號 defouter fun definner x return fun x return in...