python裝飾器 聊聊Python中的裝飾器

2021-10-11 19:51:11 字數 1446 閱讀 6489

在django中曾經使用過`@fun`這種格式的語法,用在了定義檢視的函式上,類似一種***用來控制當前檢視的訪問許可權。

裝飾器(decorator)是幹嘛的?對於受到封裝的原函式來說,裝飾器能夠在那個函式執行前或者執行後分別執行一些**,使得可以再裝飾器裡面訪問並修改原函式的引數以及返回值,以實現約束定義、除錯程式、註冊函式等目標。
我們定義乙個計算python程式執行時間的裝飾器,在定義乙個需要執行的函式,**如下:

import time

import functools

def t(fun):

'''定義乙個程式執行時間計算函式'''

@functools.wraps(fun)

start = time.time() # 起始時間

fun(*args, **kwargs) # 要執行的函式

end = time.time() # 結束時間

@tdef myfunc(x, y):

'''列印從x到y的數值'''

for i in range(x, y):

print(i)

myfunc(0, 9)

執行結果:

012

3456

78

這樣的話,我們就可以在不破壞原函式**的情況下為函式新增了計算當前函式執行時間的功能。

import time

import functools

def t(str):

'''定義乙個程式執行時間計算函式'''

def decorator(fun):

@functools.wraps(fun)

start = time.time() # 起始時間

fun(*args, **kwargs) # 要執行的函式

end = time.time() # 結束時間

print('傳入的字串是:', str)

return decorator

@t('hello world')

def myfunc(x, y):

'''列印從x到y的數值'''

for i in range(x, y):

print(i)

myfunc(0, 9)

執行結果:

012

3456

78傳入的字串是: hello world

`functools.wraps`是為了保留原函式的屬性不被裝飾器破壞,這個時候就可以使用`functools.wraps`。

functools這個庫里有很多關於函式的功能模組,後續我們在繼續研究。

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...