1. 程式人生 > 程式設計 >python裝飾器使用例項詳解

python裝飾器使用例項詳解

這篇文章主要介紹了python裝飾器使用例項詳解,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

python裝飾器的作用就是在不想改變原函式程式碼的情況下,增加新的功能.主要應用了python閉包的概念,現在用1個小例子說明

import time
def foo():
  time.sleep(1)
  
def bar():
  time.sleep(2)
  
def show_time(f):
  def inner():
    start_time = time.time()
    f()
    end_time = time.time()
    print(end_time-start_time)
  return inner
#show_time(f) is a decoration function
foo = show_time(foo)
bar = show_time(bar)

foo()
bar()

上面的程式碼定義了兩個函式foo()和bar(). 通過裝飾器函式show_time(f),在其內部定義了另一個閉包函式inner(),再通過foo=show_time(foo),bar=show_time(bar)語句將foo()和bar()函式同裝飾器函式關聯起來,從而實現了不改變foo()和bar()函式程式碼,增加列印程式執行時間的功能.程式的執行結果如下:

1.0011370182
2.00142788887

顯然,程式在沒有改變原函式的情況下,實現了呼叫原函式顯示程式執行時間的功能.

上面的小程式可以將呼叫裝飾器的語句改成@decoration的形式,效果是造價的,改變後的程式如下,其功能和上面的程式完全相同.

import time

@show_time #foo = show_time(foo)
def foo():
  time.sleep(1)
 
@show_time #bar = show_time(bar)
def bar():
  time.sleep(2)
  
  
def show_time(f):
  def inner():
    start_time = time.time()
    f()
    end_time = time.time()
    print(end_time-start_time)
  return inner
#show_time(f) is a decoration function

foo()
bar()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。