亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python裝飾器如何實現修復過程解析

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

Python裝飾器(decorator)在實現的時候,被裝飾后的函數其實已經是另外一個函數了(函數名等函數屬性會發(fā)生改變),

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

它能保留原有函數的名稱和docstring。

未加@wraps的時候:

from functools import wraps


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

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

打印結果是:

但是加上@wraps以后:

from functools import wraps


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

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

打印結果是:

其中主要的就是兩個變量:

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

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

簡單來說就是:

如果沒使用@wraps,當A調用了裝飾器B的話,即使A.name,返回的會是裝飾器B的函數名稱,而不是A的函數名稱

如果使用了@wraps,當A調用了裝飾器B的話,A.__ name__返回的會是A函數的名稱,而不是飾器B的名稱,

這也即使常說的@wraps是裝飾器的修復技術,

實際就是修復還原了A的__ name__變量,同理__ doc__變量也是一樣。

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

相關文章

  • Python sublime安裝及配置過程詳解

    Python sublime安裝及配置過程詳解

    這篇文章主要介紹了Python sublime安裝及配置過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • Python實現vlog生成器的示例代碼

    Python實現vlog生成器的示例代碼

    vlog,全稱為Video?blog,意為影音博客,也有翻譯為微錄。本文將嘗試用Python基于Moviepy從一個文本文件中自動生成一個視頻格式的vlog,感興趣的可以了解一下
    2023-01-01
  • python實現線性回歸的示例代碼

    python實現線性回歸的示例代碼

    線性回歸就是通過多次取點,找出符合函數的曲線,那么就可以完成一維線性回歸,本文通過實例代碼給大家介紹python實現線性回歸的相關知識,感興趣的朋友一起看看吧
    2022-02-02
  • PyTorch簡單手寫數字識別的實現過程

    PyTorch簡單手寫數字識別的實現過程

    Pytorch是熱門的深度學習框架之一,通過經典的MNIST數據集進行快速的pytorch入門,這篇文章主要給大家介紹了關于PyTorch簡單手寫數字識別的相關資料,需要的朋友可以參考下
    2021-11-11
  • Python3合并兩個有序數組代碼實例

    Python3合并兩個有序數組代碼實例

    這篇文章主要介紹了Python3合并兩個有序數組代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Keras: model實現固定部分layer,訓練部分layer操作

    Keras: model實現固定部分layer,訓練部分layer操作

    這篇文章主要介紹了Keras: model實現固定部分layer,訓練部分layer操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python高級過濾器之filter函數詳解

    Python高級過濾器之filter函數詳解

    在Python中,filter()是一個非常有用的內置函數,它能夠根據指定的函數來篩選出可迭代對象中滿足條件的元素,本文將從入門到精通,全面介紹filter()函數的用法和相關知識點
    2023-08-08
  • python擴展庫numpy入門教程

    python擴展庫numpy入門教程

    這篇文章主要為大家介紹了python擴展庫numpy入門教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • 使用PYTHON解析Wireshark的PCAP文件方法

    使用PYTHON解析Wireshark的PCAP文件方法

    今天小編就為大家分享一篇使用PYTHON解析Wireshark的PCAP文件方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python?PyQt5?開啟線程防止界面卡死閃退問題解決

    Python?PyQt5?開啟線程防止界面卡死閃退問題解決

    這篇文章主要介紹了Python?PyQt5?開啟線程避免界面卡死閃退,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06

最新評論