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

簡單理解Python中的裝飾器

 更新時間:2015年07月31日 08:59:09   作者:Yi_Zhi_Yu  
這篇文章主要介紹了Python中的裝飾器,是Python入門學習中的基礎知識,需要的朋友可以參考下

Python的裝飾器可以實現(xiàn)在代碼運行期間修改函數(shù)的上下文, 即可以定義函數(shù)在執(zhí)行之前進行何種操作和函數(shù)執(zhí)行后進行何種操作, 而函數(shù)本身并沒有任何的改變。


首先, 我們先定義一個函數(shù), 這個函數(shù)可以輸出我的個人昵稱:

def my_name():
  print "Yi_Zhi_Yu"
my_name() # Yi_Zhi_Yu

那假如我需要在個人昵稱輸出前, 在輸出我的個人uid呢, 當然, 要求是不改動現(xiàn)有的my_name函數(shù), 這個時候就可以使用裝飾器了

首先, 裝飾器也是個函數(shù), 其次, 他需要接受一個參數(shù),該參數(shù)表示了要被裝飾的函數(shù)(即my_name):

def my_info(func):
  def wrapper(*args, **params):
    print 218
    return func(*args, **params)
  return wrapper

然后與相應的被裝飾函數(shù)關聯(lián)起來的方法就是使用@my_info寫在被裝飾函數(shù)的前面

@my_info
def my_name():
  print "Yi_Zhi_Yu"

最后, 在執(zhí)行my_name的時候, 就能既輸出我的uid, 又能輸出我的昵稱了

my_name()
#218
#Yi_Zhi_Yu

在上面, 最讓我們疑惑的是裝飾器函數(shù)定義里面的wrapper函數(shù), 裝飾器本身返回的是wrapper函數(shù)的定義, 而wrapper中則定義了對被裝飾函數(shù)(my_name)的調(diào)用, func表示的就是被裝飾函數(shù), 說白了, 裝飾器只是把某個不得改動的函數(shù)(a)放到另一個函數(shù)(b)中, 在b里面調(diào)用a, 在調(diào)用前后就可以做所謂的看起來像裝飾的工作了。
my_info的最終返回的wrapper函數(shù)的定義, 并不是執(zhí)行結果,只有當wrapper真正執(zhí)行的時候, 才會真正的執(zhí)行my_name方法, 這就是閉包時所說的內(nèi)容。
wrapper中的參數(shù), 實際上則是傳遞給func(實際上是my_name)的參數(shù)

因為裝飾器也是個函數(shù), 那么裝飾器自己的能不能有參數(shù)傳遞呢??梢裕?不過需要定義一個更高階的函數(shù), 也就是外面還要套一層函數(shù), 比如, 我還要輸出我的自定義的一個信息,需要傳遞參數(shù)

def c_info(text):
  def my_info(func):
    def wrapper(*args, **params):
      print text
      print 218
      return func(*args, **params)
    return wrapper
  return my_info

 #使用裝飾器

@c_info("Tony")
 def my_name():
  print "Yi_Zhi_Yu"

 my_name()
 #Tony
 #218
 #Yi_Zhi_Yu


與前面的那個裝飾器相比, 僅僅是多了個外層, 內(nèi)層也僅僅是增加了對外層傳入?yún)?shù)(text)的調(diào)用

總而言之, Python在函數(shù)定義中支持了對oop思想中的裝飾器的實現(xiàn), 其本質(zhì)也只是使用了閉包的思路, 延遲調(diào)用, 并在調(diào)用前后增加自己的其他實現(xiàn)內(nèi)容

Ps: 以上皆為學習筆記, 附帶自己的理解, 難免有偏差, 如有發(fā)現(xiàn)紕漏, 還望指正

相關文章

  • Python+Pandas實現(xiàn)數(shù)據(jù)透視表

    Python+Pandas實現(xiàn)數(shù)據(jù)透視表

    對于數(shù)據(jù)透視表,相信對于Excel比較熟悉的小伙伴都知道如何使用它。本文將利用Python Pandas實現(xiàn)數(shù)據(jù)透視表功能,感興趣的可以學習一下
    2022-06-06
  • 讓 python 命令行也可以自動補全

    讓 python 命令行也可以自動補全

    這篇文章主要介紹了讓 python 命令行也自動補全,需要的朋友可以參考下
    2014-11-11
  • Python刪除指定目錄下過期文件的2個腳本分享

    Python刪除指定目錄下過期文件的2個腳本分享

    這篇文章主要介紹了Python刪除指定目錄下過期文件2個腳本分享,可以用在如刪除指定日期前的日志文件,需要的朋友可以參考下
    2014-04-04
  • Python入門之后再看點什么好?

    Python入門之后再看點什么好?

    看完了基礎書,甚至看兩遍了,但自己寫的時候還是沒思路,我該怎么辦?這篇文章主要介紹了Python入門之后再看點什么好,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 在Python中字典根據(jù)多項規(guī)則排序的方法

    在Python中字典根據(jù)多項規(guī)則排序的方法

    今天小編就為大家分享一篇在Python中字典根據(jù)多項規(guī)則排序的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • python使用matplotlib繪制雷達圖

    python使用matplotlib繪制雷達圖

    這篇文章主要為大家詳細介紹了python使用matplotlib繪制雷達圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • pytorch對梯度進行可視化進行梯度檢查教程

    pytorch對梯度進行可視化進行梯度檢查教程

    今天小編就為大家分享一篇pytorch對梯度進行可視化進行梯度檢查教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python使用Matplotlib繪圖及設置實例(用python制圖)

    python使用Matplotlib繪圖及設置實例(用python制圖)

    Python matplotlib包可以畫各種類型的圖,功能非常齊全,下面這篇文章主要給大家介紹了關于python使用Matplotlib繪圖及設置的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-05-05
  • Django form表單與請求的生命周期步驟詳解

    Django form表單與請求的生命周期步驟詳解

    這篇文章主要介紹了Django-form表單與請求的生命周期,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • python中pd.Series()函數(shù)的使用

    python中pd.Series()函數(shù)的使用

    本文主要介紹了python中pd.Series()函數(shù)的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05

最新評論

龙井市| 彰化市| 拜泉县| 阳泉市| 滦平县| 清水河县| 铁岭市| 石棉县| 黔南| 遂溪县| 永济市| 牡丹江市| 泸水县| 民乐县| 华阴市| 石狮市| 新田县| 津市市| 清镇市| 广安市| 涪陵区| 华蓥市| 常宁市| 宣城市| 和龙市| 彰化县| 九寨沟县| 雅安市| 莱阳市| 综艺| 绥德县| 武冈市| 镇宁| 普格县| 建湖县| 商南县| 汤阴县| 香港| 广元市| 阜城县| 深圳市|