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

簡單上手Python中裝飾器的使用

 更新時間:2015年07月12日 12:16:53   作者: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)的調用, func表示的就是被裝飾函數(shù), 說白了, 裝飾器只是把某個不得改動的函數(shù)(a)放到另一個函數(shù)(b)中, 在b里面調用a, 在調用前后就可以做所謂的看起來像裝飾的工作了。
my_info的最終返回的wrapper函數(shù)的定義, 并不是執(zhí)行結果,只有當wrapper真正執(zhí)行的時候, 才會真正的執(zhí)行my_name方法, 這就是閉包時所說的內容。
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

與前面的那個裝飾器相比, 僅僅是多了個外層, 內層也僅僅是增加了對外層傳入參數(shù)(text)的調用

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

相關文章

  • pytorch visdom安裝開啟及使用方法

    pytorch visdom安裝開啟及使用方法

    這篇文章主要介紹了pytorch visdom安裝開啟及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04
  • 一篇文章帶你深入學習Python函數(shù)

    一篇文章帶你深入學習Python函數(shù)

    這篇文章主要帶大家深入學習Python函數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Python進行圖片驗證碼識別方法步驟

    Python進行圖片驗證碼識別方法步驟

    這篇文章主要給大家介紹了關于Python進行圖片驗證碼識別的相關資料,基于Python和OpenCV的驗證碼識別系統(tǒng)具有重要的研究意義和實際應用價值,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • 詳細分析python3的reduce函數(shù)

    詳細分析python3的reduce函數(shù)

    小編給大家整理了python3的reduce函數(shù)詳細用法以及相關的技巧,需要的朋友們參考一下吧。
    2017-12-12
  • Python中音頻處理庫pydub的使用教程

    Python中音頻處理庫pydub的使用教程

    這篇文章主要給大家介紹了關于Python中音頻處理庫pydub的使用教程,pydub是Python中用戶處理音頻文件的一個庫,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Python中的類與對象之描述符詳解

    Python中的類與對象之描述符詳解

    這篇文章主要介紹了Python中的描述符詳解,屬于Python學習過程中類與對象的基本知識,需要的朋友可以參考下
    2015-03-03
  • python -v 報錯問題的解決方法

    python -v 報錯問題的解決方法

    在本篇文章里小編給大家整理了關于python -v 報錯問題的解決方法及相關知識點,有興趣的朋友們可以學習下。
    2020-09-09
  • Python使用argcomplete模塊實現(xiàn)自動補全

    Python使用argcomplete模塊實現(xiàn)自動補全

    argcomplete?是一個強大的Python庫,可以大幅改善命令行應用程序的用戶體驗,本文主要介紹了argcomplete模塊的相關用法,感興趣的小伙伴可以了解下
    2023-11-11
  • PyCharm中配置PySide2的圖文教程

    PyCharm中配置PySide2的圖文教程

    這篇文章主要介紹了PyCharm中配置PySide2的教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • pytorch+sklearn實現(xiàn)數(shù)據加載的流程

    pytorch+sklearn實現(xiàn)數(shù)據加載的流程

    這篇文章主要介紹了pytorch+sklearn實現(xiàn)數(shù)據加載,之前在訓練網絡的時候加載數(shù)據都是稀里糊涂的放進去的,也沒有理清楚里面的流程,今天整理一下,加深理解,也方便以后查閱,需要的朋友可以參考下
    2022-11-11

最新評論

沿河| 临江市| 拉孜县| 湾仔区| 安福县| 眉山市| 安宁市| 北票市| 灵宝市| 海门市| 辛集市| 江津市| 靖安县| 城口县| 丹凤县| 疏附县| 芜湖县| 九龙坡区| 乌兰县| 永康市| 余庆县| 天峨县| 天峨县| 虹口区| 武平县| 永济市| 长岭县| 大港区| 扶绥县| 含山县| 阆中市| 云阳县| 博野县| 贡山| 静乐县| 中牟县| 齐齐哈尔市| 兰坪| 阳城县| 双流县| 外汇|