欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

簡單理解Python中的裝飾器

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

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


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

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

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

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

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

然后與相應的被裝飾函數關聯起來的方法就是使用@my_info寫在被裝飾函數的前面

@my_info
def my_name():
  print "Yi_Zhi_Yu"

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

my_name()
#218
#Yi_Zhi_Yu

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

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

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


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

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

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

相關文章

  • Pytorch maxpool的ceil_mode用法

    Pytorch maxpool的ceil_mode用法

    今天小編就為大家分享一篇Pytorch maxpool的ceil_mode用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 使用Python實現NBA球員數據查詢小程序功能

    使用Python實現NBA球員數據查詢小程序功能

    這篇文章主要介紹了使用Python實現NBA球員數據查詢小程序功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • 淺談Django+Gunicorn+Nginx部署之路

    淺談Django+Gunicorn+Nginx部署之路

    這篇文章主要介紹了Django+Gunicorn+Nginx部署之路,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Python中os模塊功能與用法詳解

    Python中os模塊功能與用法詳解

    這篇文章主要介紹了Python中os模塊功能與用法,總結分析了Python os模塊基本功能、內置函數、使用方法及相關操作注意事項,需要的朋友可以參考下
    2020-02-02
  • opencv python簡易文檔之圖像處理算法

    opencv python簡易文檔之圖像處理算法

    OpenCV是一個開源庫,包含了許多計算機視覺算法,它在計算機視覺和圖像處理中起著重要作用,用于實時操作,其效率足以滿足工業(yè)上的要求,這篇文章主要給大家介紹了關于opencv python簡易文檔之圖像處理算法的相關資料,需要的朋友可以參考下
    2021-08-08
  • Python argparse中的action=store_true用法小結

    Python argparse中的action=store_true用法小結

    這篇文章主要介紹了Python argparse中的action=store_true用法小結,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • Django 請求Request的具體使用方法

    Django 請求Request的具體使用方法

    這篇文章主要介紹了Django 請求Request的具體使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • python3.6之xlwt如何設置單元格對齊方式

    python3.6之xlwt如何設置單元格對齊方式

    這篇文章主要介紹了python3.6之xlwt如何設置單元格對齊方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • 淺談pandas關于查看庫或依賴庫版本的API原理

    淺談pandas關于查看庫或依賴庫版本的API原理

    本文主要介紹了淺談pandas關于查看庫或依賴庫版本的API原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • Python批量修改文本文件內容的方法

    Python批量修改文本文件內容的方法

    這篇文章主要介紹了Python批量修改文本文件內容的方法的相關資料,需要的朋友可以參考下
    2016-04-04

最新評論