欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python中的decorator的作用詳解

 更新時(shí)間:2018年07月26日 08:28:27   作者:丹華抱一鷇音子  
這篇文章主要介紹了python中的decorator的作用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧

1、概念

裝飾器(decorator)就是:定義了一個(gè)函數(shù),想在運(yùn)行時(shí)動(dòng)態(tài)增加功能,又不想改動(dòng)函數(shù)本身的代碼??梢云鸬綇?fù)用代碼的功能,避免每個(gè)函數(shù)重復(fù)性編寫代碼,簡(jiǎn)言之就是拓展原來(lái)函數(shù)功能的一種函數(shù)。在python中,裝飾器(decorator)分為 函數(shù)裝飾器 和 類裝飾器 兩種。python中內(nèi)置的@語(yǔ)言就是為了簡(jiǎn)化裝飾器調(diào)用。

列出幾個(gè)裝飾器函數(shù):

打印日志:@log

檢測(cè)性能:@performance

數(shù)據(jù)庫(kù)事務(wù):@transaction

URL路由:@post('/register')

2、使用方法

(1)無(wú)參數(shù)decorator

編寫一個(gè)@performance,它可以打印出函數(shù)調(diào)用的時(shí)間。

import time

def performance(f):
 def log_time(x):
  t1 = time.time()
  res = f(x)
  t2 = time.time()
  print 'call %s() in %fs' %(f.__name__,(t2 - t1))
  return res
 return log_time

@performance
def factorial(n):
 return reduce(lambda x,y : x*y,range(1,n+1))

print factorial(10)

運(yùn)行結(jié)果:

call factorial() in 0.006009s 2 3628800

運(yùn)行原理:

此時(shí),factorial就作為performance的函數(shù)對(duì)象,傳遞給f。當(dāng)調(diào)用factorial(10)的時(shí)候也就是調(diào)用log_time(10)函數(shù),而在log_time函數(shù)內(nèi)部,又調(diào)用了f,這就造成了裝飾器的效果。說明f是被裝飾函數(shù),而x是被裝飾函數(shù)的參數(shù)。

(2)帶參數(shù)decorator

請(qǐng)給 @performace 增加一個(gè)參數(shù),允許傳入's'或'ms'。

import time

def performance(unit):
 def perf_decorator(f):
  def wrapper(*args, **kw):
   t1 = time.time()
   r = f(*args, **kw)
   t2 = time.time()
   t = (t2 - t1)*1000 if unit =='ms' else (t2 - t1)
   print 'call %s() in %f %s'%(f.__name__, t, unit)
   return r
  return wrapper
 return perf_decorator

@performance('ms') 
def factorial(n):
 return reduce(lambda x,y: x*y, range(1, n+1))

print factorial(10)

運(yùn)行結(jié)果:

call factorial() in 9.381056 ms 2 3628800

運(yùn)行原理:

它的內(nèi)部邏輯為factorial=performance('ms')(factorial);

這里面performance('ms')返回是perf_decorator函數(shù)對(duì)象,performance('ms')(factorial)其實(shí)就是perf_decorator(factorial),然后其余的就和上面是一樣的道理了。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論