真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python學(xué)習(xí)筆記: 裝飾器Decorator

介紹

裝飾器是對(duì)功能函數(shù)的加強(qiáng). 在原來(lái)的功能函數(shù)之外,另外定義一個(gè)裝飾器函數(shù),對(duì)原來(lái)的功能函數(shù)進(jìn)行封裝(wrapper)并在wrapper的過(guò)程中增加一些輔助功能。

創(chuàng)新互聯(lián)專(zhuān)注于清苑網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供清苑營(yíng)銷(xiāo)型網(wǎng)站建設(shè),清苑網(wǎng)站制作、清苑網(wǎng)頁(yè)設(shè)計(jì)、清苑網(wǎng)站官網(wǎng)定制、微信小程序開(kāi)發(fā)服務(wù),打造清苑網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供清苑網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。

應(yīng)用場(chǎng)景

如下場(chǎng)景:

業(yè)務(wù)函數(shù)func_biz_1(), func_biz_2()... 里面寫(xiě)的是業(yè)務(wù)邏輯代碼。如果我們現(xiàn)在希望在每個(gè)函數(shù)里面增加一些輔助功能(比如打印日志,計(jì)算函數(shù)運(yùn)行時(shí)間)

這些輔助功能的代碼都是通用的。不使用decorator的情況下我們就要在業(yè)務(wù)函數(shù)里面增加這些輔助代碼,缺點(diǎn):

  • 輔助功能的代碼重復(fù)copy到每個(gè)功能func中
  • 修改輔助功能的代碼很麻煩
  • 業(yè)務(wù)func里面同時(shí)有業(yè)務(wù)邏輯和輔助功能的代碼混在一起。代碼量變大,且非常亂。

要解決這個(gè)問(wèn)題就要用裝飾器,將業(yè)務(wù)函數(shù)封裝(wrapper),在wrapper的過(guò)程中將輔助功能代碼加進(jìn)去。

代碼例子

不用裝飾器

一個(gè)函數(shù)里面既有主業(yè)務(wù)邏輯(打印質(zhì)數(shù)),又有輔助功能(對(duì)函數(shù)執(zhí)行時(shí)間計(jì)時(shí))

import time

# 判斷輸入的num是否是質(zhì)數(shù)
def is_prime(num):
  ''' Tell if num is a prime number '''

  if num < 2:
    return False
  if num == 2:
    return True
  for i in range(2, num):
    if num % i == 0:
      return False

  return True

# 打印2到之間所有的質(zhì)數(shù)
def prime_numbers():
  ''' print all the prime numbers btw 2...
      print the onsumed time
  '''

  t_start = time.time()
  for i in range(2, ):
    if is_prime(i):
      print(i)
  t_stop = time.time()

  print("time consumed: {}".format(t_stop - t_start))

prime_numbers()

缺點(diǎn): 統(tǒng)計(jì)時(shí)間的代碼和業(yè)務(wù)代碼混在一起寫(xiě)在prime_numbers()里面

用裝飾器

import time

# 定義一個(gè)裝飾器: 統(tǒng)計(jì)函數(shù)運(yùn)行時(shí)間
def display_time(func):
  ''' define a decorator函數(shù),參數(shù)是函數(shù) '''

  def wrapper():
      t_start = time.time()
      func()
      t_stop = time.time()
      print("time consumed: {:.4}".format(t_stop - t_start))

  return wrapper

# 判斷輸入的num是否是質(zhì)數(shù)
def is_prime(num):
  ''' Tell if num is a prime number '''

  if num < 2:
    return False
  if num == 2:
    return True
  for i in range(2, num):
    if num % i == 0:
      return False

  return True

# 打印2到之間的質(zhì)數(shù)count
@display_time
def prime_numbers():
  ''' count the prime numbers btw 2... '''

  for i in range(2, ):
    if is_prime(i):
      print(i)

prime_numbers() # 運(yùn)行它的時(shí)候?qū)嶋H上運(yùn)行的是裝飾器函數(shù)wrapper() 

通過(guò)裝飾器實(shí)現(xiàn)了業(yè)務(wù)邏輯與主服務(wù)功能的分離


本文名稱(chēng):Python學(xué)習(xí)筆記: 裝飾器Decorator
標(biāo)題網(wǎng)址:http://weahome.cn/article/dsogphs.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部