python裝飾器使用方法例項

NO IMAGE

什麼是python的裝飾器?

網路上的定義:
裝飾器就是一函式,用來包裝函式的函式,用來修飾原函式,將其重新賦值給原來的識別符號,並永久的喪失原函式的引用。

最能說明裝飾器的例子如下:

複製程式碼 程式碼如下:
#-*- coding: UTF-8 -*-
import time

def foo():
    print ‘in foo()’

# 定義一個計時器,傳入一個,並返回另一個附加了計時功能的方法
def timeit(func):

    # 定義一個內嵌的包裝函式,給傳入的函式加上計時功能的包裝
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print ‘used:’, end – start

    # 將包裝後的函式返回
    return wrapper

foo = timeit(foo)
foo()

python中提供了一個@符號的語法糖,用來簡化上面的程式碼,他們的作用一樣

複製程式碼 程式碼如下:
import time

def timeit(func):
    def wrapper():
        start = time.clock()
        func()
        end =time.clock()
        print ‘used:’, end – start
    return wrapper

@timeit
def foo():
    print ‘in foo()’

foo()

這2段的程式碼是一樣的,等價的。

內建的3個裝飾器,他們分別是staticmethod,classmethod,property,他們的作用是分別把類中定義的方法變成靜態方法,類方法和屬性,如下:

複製程式碼 程式碼如下:
class Rabbit(object):

    def __init__(self, name):
        self._name = name

    @staticmethod
    def newRabbit(name):
        return Rabbit(name)

    @classmethod
    def newRabbit2(cls):
        return Rabbit(”)

    @property
    def name(self):
        return self._name

裝飾器的巢狀:
就一個規律:巢狀的順序和程式碼的順序是相反的。
也是來看一個例子:

複製程式碼 程式碼如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-

def makebold(fn):
    def wrapped():
        return “<b>” fn() “</b>”
    return wrapped

def makeitalic(fn):
    def wrapped():
        return “<i>” fn() “</i>”
    return wrapped

@makebold
@makeitalic
def hello():
    return “hello world”

print hello()

返回的結果是:
<b><i>hello world</i></b>
為什麼是這個結果呢?
1.首先hello函式經過makeitalic 函式的裝飾,變成了這個結果<i>hello world</i>
2.然後再經過makebold函式的裝飾,變成了<b><i>hello world</i></b>,這個理解起來很簡單。

您可能感興趣的文章:

介紹Python的@property裝飾器的用法Python中的各種裝飾器詳解深入理解python中的閉包和裝飾器詳解Python中的裝飾器、閉包和functools的教程巧用Python裝飾器 免去呼叫父類建構函式的麻煩Python中的多重灌飾器例項講解Python程式設計中@property裝飾器的用法使用Python裝飾器在Django框架下去除冗餘程式碼的教程python使用裝飾器和執行緒限制函式執行時間的方法Python裝飾器使用示例及實際應用例子Python裝飾器的執行過程例項分析