最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python裝飾器如何實(shí)現(xiàn)修復(fù)過程解析

 更新時(shí)間:2020年09月05日 11:28:22   作者:Python探索牛  
這篇文章主要介紹了Python裝飾器如何實(shí)現(xiàn)修復(fù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Python裝飾器(decorator)在實(shí)現(xiàn)的時(shí)候,被裝飾后的函數(shù)其實(shí)已經(jīng)是另外一個(gè)函數(shù)了(函數(shù)名等函數(shù)屬性會(huì)發(fā)生改變),

為了不影響,Python的functools包中提供了一個(gè)叫wraps的decorator來消除這樣的副作用。寫一個(gè)decorator的時(shí)候,最好在實(shí)現(xiàn)之前加上functools的wrap,

它能保留原有函數(shù)的名稱和docstring。

未加@wraps的時(shí)候:

from functools import wraps


def wrapper(func):
  # @wraps(func)
  def inner(*args, **kwargs):
    print("裝飾器工作中...")
    func(*args, **kwargs)
  return inner
@wrapper
def f1(arg):
  """
  這是一個(gè)測試裝飾器修復(fù)技術(shù)的函數(shù)
  :param arg: 隨便傳
  :return: 沒有
  """
  print(arg)

f1('呵呵')
print(f1.__name__,f1.__doc__)

打印結(jié)果是:

但是加上@wraps以后:

from functools import wraps


def wrapper(func):
  @wraps(func)
  def inner(*args, **kwargs):
    print("裝飾器工作中...")
    func(*args, **kwargs)
  return inner
@wrapper
def f1(arg):
  """
  這是一個(gè)測試裝飾器修復(fù)技術(shù)的函數(shù)
  :param arg: 隨便傳
  :return: 沒有
  """
  print(arg)

f1('呵呵')
print(f1.__name__,f1.__doc__)

打印結(jié)果是:

其中主要的就是兩個(gè)變量:

1、顯示 正在執(zhí)行的函數(shù)的名稱 f.name

2、顯示 正在執(zhí)行的函數(shù)的注釋 f.doc

簡單來說就是:

如果沒使用@wraps,當(dāng)A調(diào)用了裝飾器B的話,即使A.name,返回的會(huì)是裝飾器B的函數(shù)名稱,而不是A的函數(shù)名稱

如果使用了@wraps,當(dāng)A調(diào)用了裝飾器B的話,A.__ name__返回的會(huì)是A函數(shù)的名稱,而不是飾器B的名稱,

這也即使常說的@wraps是裝飾器的修復(fù)技術(shù),

實(shí)際就是修復(fù)還原了A的__ name__變量,同理__ doc__變量也是一樣。

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

相關(guān)文章

最新評論

望城县| 荔波县| 竹北市| 西安市| 永泰县| 达日县| 临泉县| 扎囊县| 中宁县| 洛扎县| 丰镇市| 泗阳县| 遂宁市| 朝阳区| 昌邑市| 梅州市| 西安市| 板桥市| 张掖市| 广宗县| 龙游县| 治多县| 绥阳县| 望谟县| 赤水市| 丹巴县| 阳谷县| 新密市| 大冶市| 临海市| 顺义区| 岳池县| 枣庄市| 武乡县| 桑日县| 临颍县| 乌拉特中旗| 阳西县| 宝山区| 雷山县| 五常市|