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

python中的decorator的作用詳解

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

1、概念

裝飾器(decorator)就是:定義了一個函數(shù),想在運行時動態(tài)增加功能,又不想改動函數(shù)本身的代碼??梢云鸬綇陀么a的功能,避免每個函數(shù)重復性編寫代碼,簡言之就是拓展原來函數(shù)功能的一種函數(shù)。在python中,裝飾器(decorator)分為 函數(shù)裝飾器 和 類裝飾器 兩種。python中內置的@語言就是為了簡化裝飾器調用。

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

打印日志:@log

檢測性能:@performance

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

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

2、使用方法

(1)無參數(shù)decorator

編寫一個@performance,它可以打印出函數(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)

運行結果:

call factorial() in 0.006009s 2 3628800

運行原理:

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

(2)帶參數(shù)decorator

請給 @performace 增加一個參數(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)

運行結果:

call factorial() in 9.381056 ms 2 3628800

運行原理:

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

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

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

相關文章

  • Python基礎學習之奇異的GUI對話框

    Python基礎學習之奇異的GUI對話框

    今天跨進了GUI編程的園地,才發(fā)現(xiàn)python語言是這么的好玩,文中對GUI對話框作了非常詳細的介紹,對正在學習python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 淺析Python數(shù)字類型和字符串類型的內置方法

    淺析Python數(shù)字類型和字符串類型的內置方法

    這篇文章主要介紹了Python數(shù)字類型和字符串類型的內置方法,本文通過實例代碼講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • 一小時學會TensorFlow2之大幅提高模型準確率

    一小時學會TensorFlow2之大幅提高模型準確率

    這篇文章主要介紹了TensorFlow2之大幅提高模型準確率,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Python?operator模塊的使用詳解

    Python?operator模塊的使用詳解

    本文主要介紹了Python?operator模塊的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧<BR>
    2023-06-06
  • Python構造自定義方法來美化字典結構輸出的示例

    Python構造自定義方法來美化字典結構輸出的示例

    這篇文章主要介紹了用Python構造自定義方法來美化字典結構輸出的示例,原理就是利用遞歸法來拼接字符串,需要的朋友可以參考下
    2016-06-06
  • Python實現(xiàn)從log日志中提取ip的方法【正則提取】

    Python實現(xiàn)從log日志中提取ip的方法【正則提取】

    這篇文章主要介紹了Python實現(xiàn)從log日志中提取ip的方法,涉及Python文件讀取、數(shù)據(jù)遍歷、正則匹配等相關操作技巧,需要的朋友可以參考下
    2018-03-03
  • python連接mysql實例分享

    python連接mysql實例分享

    本文給大家匯總介紹了使用python連接mysql的幾個實例,非常的簡單實用,有需要的小伙伴可以參考下
    2016-10-10
  • python如何標準化日期時間格式轉化成非標準化格式

    python如何標準化日期時間格式轉化成非標準化格式

    這篇文章主要介紹了python如何標準化日期時間格式轉化成非標準化格式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python 捕獲代碼中所有異常的方法

    Python 捕獲代碼中所有異常的方法

    這篇文章主要介紹了Python 捕獲代碼中所有異常的方法,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Python中的null是什么

    詳解Python中的null是什么

    這篇文章主要介紹了Python中的null是什么,Python中其實沒有null這個詞,取而代之的是None對象,即特殊類型NoneType,代表空、沒有,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-09-09

最新評論