python程式設計(巧用裝飾器)

2021-08-14 14:46:46 字數 1742 閱讀 3338

以前沒有用過裝飾器,也不知道它有什麼用。直到最近寫了乙個log函式,在直到原來python的裝飾器可以這麼方便。

1、原來debug訊息的寫法

假設有乙個process函式,原來是這麼寫的,

def process(*arg,  **dic):

pass

後面,我們為了確認這個函式是否被呼叫了,那麼可以這麼寫,

def process(*arg,  **dic):

print 'enter function process'

2、引入裝飾器

用上面那種print的方法沒有什麼問題,但是總是覺得非常麻煩,其實我們可以用乙個裝飾器來解決。

def log(func):

print 'enter function ' + func.__name__

return func(*arg, **dic)

3、使用裝飾器

看上去上面就是乙個普通的函式,沒有什麼特別之處。但是,它怎麼使用呢,其實很簡單,

@log

def process(*arg, **dic):

print arg, dic

有了這麼乙個裝飾器之後,那麼process函式在被呼叫的時候,就會預設呼叫log函式,從而列印相關的內容。

4、定製不同級別的訊息列印

上面的log函式雖然也能使用,但是總覺得不如分層列印好。乙個除錯函式,按道理來說,應該是按照info、warning、debug、error級別來分層列印的。所以,按照這個要求,我們也可以定製自己的訊息列印函式。

def debug_log(level):

if (1 == level):

print 'enter function ' + func.__name__

return func(*arg, **dic)

同樣,使用也非常容易,我們只需要在裝飾器內填入引數就可以了,

@debug_log(level = 1)

def process(*arg, **dic):

print arg, dic

5、完整範例

最後,我們給出整個範例**。希望大家可以在此基礎上多多練習。

#!/usr/bin/python

import os

import sys

import re

'''debug_log function

'''def debug_log(level):

if (1 == level):

print 'enter function ' + func.__name__

return func(*arg, **dic)

def log(func):

print 'enter function ' + func.__name__

return func(*arg, **dic)

'''real function

'''@debug_log(level = 1)

def process(*arg, **dic):

print arg, dic

'''file entry

'''def main():

process(1, 2, a=1)

if __name__ == '__main__':

main()

Python程式設計學習 裝飾器

簡介 裝飾器,python2.4版本引入的一種新特性。跟名字一樣,是用來裝飾的。其實裝飾器就是乙個函式,不過形式比較特殊,一般用 開頭,一般形式如下 deco deffoo pass上面的 等同於下面這句 foo deco foo 裝飾器既可以和上面一樣沒有引數,也可以是帶引數的 decomaker...

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 函式的...