第57p,裝飾器魔法糖,多個裝飾器的使用

2020-12-22 楊數Tos

大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第X篇文章,第三階段的課程:Python進階知識:Python進階知識:詳細講解Python中的函數(十)====> 函數的嵌套之裝飾器詳解(下篇)。

函數是非常重要的內容,在這裡,我會用10篇左右的文章詳細講解Python中函數定義與使用的規則。

閱讀提醒:建議小白先看一遍:【計算機基礎知識】和【Python基礎知識】課程,否則你不一定聽得懂!

一、裝飾器的魔法「糖」

1、用法

在Python中提供了一個裝飾器的簡潔用法,即:在需要被裝飾的方法前面@裝飾器名稱即可;

用法:

@裝飾器名稱

被裝飾對象

例如:

@inner 這一句就等同於fun = inner(fun);

2、執行過程

@裝飾器名稱

當Python解釋器遇到@時,會將被裝飾對象當作參數,傳遞給裝飾器,並將最終的賦值返回給被裝飾對象;

二、多個裝飾器

1、多個裝飾器的用法

用多層裝飾器達到效果;(建議:裝飾器的層數最多不要超過3個,因為裝飾器的個數過多只會增加程序的複雜性,讓程序的可讀性降低)

格式:

@裝飾器1

@裝飾器2

被裝飾對象

2、執行過程

多個裝飾器,加載順序從被裝飾對象最近的開始,先執行裝飾器2,再執行裝飾器1;

例如:

@fun1

@fun2

def fu(x):

print("被裝飾對象{}".format(x))

它的執行過程如下:

@fun2 等同於:fun2內的wrp內存地址 = fun2(fu)

@fun1等同於:fun1內的wrp的內存地址=fun1(fun2內的wrp內存地址);

① 整個執行過程是先調用了fun2內裝飾器的功能,將結果返回;

② 再調用fun1內的裝飾器的功能,並將前面執行的結果當作參數傳給fun1,然後返回結果;

③ 最後,執行被裝飾對象的代碼;結束程序運行!

最後,還一種多層有參裝飾器的用法,因為我們一般使用得比較少,只會在後期的實戰案例中體現。

以上是本期內容,如果有表達不對的內容,歡迎您的留言、斧正,我們一起天天向上。

感謝您的閱讀,您的三連【關注、點讚、收藏】就是對我最大的支持,謝謝!

本文由楊數Tos原創,歡迎關注,帶你一起長知識。

相關焦點

  • 詳解Python的裝飾器
    t = Test()t()  # call me像__call__這樣前後都帶下劃線的方法在Python中被稱為內置方法,有時候也被稱為魔法方法。重載這些魔法方法一般會改變對象的內部行為。上面這個例子就讓一個類對象擁有了被調用的行為。回到裝飾器上的概念上來,裝飾器要求接受一個callable對象,並返回一個callable對象(不太嚴謹,詳見後文)。
  • 一文讀懂Python裝飾器
    打開APP 一文讀懂Python裝飾器 工程師3 發表於 2018-04-28 10:48:00 談裝飾器前,還要先要明白一件事,Python 中的函數和 Java、C++不太一樣,Python 中的函數可以像普通變量一樣當做參數傳遞給另外一個函數,例如:
  • Python裝飾器以及高級用法
    所以我們用一個函數替換func_A該函數執行一些計時操作(上面的第3行),將func a的結果存儲在一個名為x的變量中(第4行),執行更多的計時操作(第5行和第6裝飾器的高級用法介紹下面這些旨在介紹裝飾器的一些更有趣的用法。具體來說,如何在類上使用裝飾器,以及如何將額外的參數傳遞給裝飾器函數。
  • Python 入門之多個裝飾器執行順序
    裝飾器是 Python 用於封裝函數或代碼的工具,網上可以搜到很多文章可以學習,在這裡要討論的是多個裝飾器執行順序的一個迷思。大部分涉及多個裝飾器裝飾的函數調用順序時都會說明它們是自上而下的,比如下面這個例子:def decorator_a(func):    print 'Get in decorator_a'    def inner_a(*args, **kwargs):        print 'Get in inner_a'        return
  • Decorator-裝飾器
    裝飾器是一種函數,寫成@ + 函數名。
  • Python退避及重試裝飾器:backoff
    退避和重試的函數裝飾器此模塊提供函數裝飾器,該函數裝飾器可用於包裝函數,以便函數重試直到滿足某些條件為止。當訪問可能出現間歇性故障的不可靠資源(如網絡資源和外部API)時,它應該有用。一般來說,它還可以用於外部生成內容的動態輪詢資源。
  • 使用python強大的裝飾器,監控數據自動化流程日誌
    裝飾器是python當中的進階用法,並且應用非常廣泛,但是在實際的工作過程中,我發現很多人常常因為覺得裝飾器很複雜,望而生畏。實際上從原理來講並不難。這一節,我會從函數為切入點,引出裝飾器的概念和基本用法,最後再結合我們的數據自動化程序,這個實際的例子,讓大家能夠使數據自動化程序功能更加的完善,並且學會裝飾器的用法,先來看一下,最終釘釘報警的效果:釘釘報警效果1、函數核心知識點第一點:函數可以作為對象,賦予給變量函數作為對象這裡把func這個函數,賦值給了send_message
  • Python遞歸函數、閉包和裝飾器
    目錄:一、遞歸函數二、閉包的深入講解三、裝飾器的使用一、 遞歸函數2、 遞歸函數的使用舉個例子:我們來計算階乘 n! = 1 * 2 * 3 * ... * n什麼是階乘呢?外部函數返回值必須是內嵌函數 通過這三點,就可以創建一個閉包,提別注意:Python裝飾器就是使用了閉包。
  • Python 類裝飾器,使用小演示
    使用類裝飾器,便能做到clean,通用:import functoolsclass ValidateParameters:    def __init__(self, func):        # 確保func被裝飾後函數信息不被改變        functools.update_wrapper(self, func)
  • 一文搞定Python裝飾器,看完面試不再慌
    今天是Python專題的第12篇文章,我們來看看Python裝飾器。一段囧事差不多五年前面試的時候,我就領教過它的重要性。那時候我Python剛剛初學乍練,看完了廖雪峰大神的博客,就去面試了。我應聘的並不是一個Python的開發崗位,但是JD當中寫到了需要熟悉Python。
  • 寫個畫圖裝飾器,通過繪圖加深對常見概率分布的理解
    import numpy as npfrom scipy.stats import beta, norm, uniform, binomimport matplotlib.pyplot as pltfrom functools import wraps2 定義帶參數的裝飾器
  • Python 裝飾器填坑指南 | 最常見的報錯信息、原因和解決方案
    Python 裝飾器簡介裝飾器(Decorator)是 Python 非常實用的一個語法糖功能。裝飾器本質是一種返回值也是函數的函數,可以稱之為「函數的函數」。其目的是在不對現有函數進行修改的情況下,實現額外的功能。在 Python 中,裝飾器屬於純粹的「語法糖」,不使用也沒關係,但是使用的話能夠大大簡化代碼,使代碼更加簡潔易讀。
  • 手把手教你pytest測試框架(7)-fixture裝飾器
    手把手教你pytest測試框架(1)-初識框架手把手教你pytest測試框架(2)-參數講解手把手教你pytest測試框架(3)-用例失敗重跑手把手教你pytest測試框架(4)-前置和後置手把手教你pytest測試框架(5)-mark標記裝飾器
  • [每日一題]2、Python中的類的定義和裝飾器@classmethod與@staticmethod
    最近創建了一個GitHub項目,主要會分享一些Python方面面試題和練習題,訪問地址:https://github.com/python3xxx/Python-Every-Day(點擊閱讀原文,直達)Python Every Day, 第 2 天python中的定義類方法有三種形式
  • 第55p,閉包函數,函數知識的綜合運用
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第55篇文章,第三階段的課程:Python進階知識:Python進階知識:詳細講解Python中的函數(八)====> 函數的嵌套調用之閉包函數。
  • Pytorch貝葉斯庫BLiTZ實現使用LSTM預測時序數據和繪製置信區間
    本文將主要講述如何使用BLiTZ(PyTorch貝葉斯深度學習庫)來建立貝葉斯LSTM模型,以及如何在其上使用序列數據進行訓練與推理。在本文中,我們將解釋貝葉斯長期短期記憶模型(LSTM)是如何工作的,然後通過一個Kaggle數據集進行股票置信區間的預測。