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

簡(jiǎn)單上手Python中裝飾器的使用

 更新時(shí)間:2015年07月12日 12:16:53   作者:Yi_Zhi_Yu  
這篇文章主要介紹了Python中裝飾器的使用,是Python進(jìn)階學(xué)習(xí)中的重要知識(shí),需要的朋友可以參考下

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

這個(gè)看起來(lái)很復(fù)雜, 實(shí)際上應(yīng)用到了我之前說(shuō)過(guò)的閉包的概念, 仔細(xì)看一看, 其實(shí)并不復(fù)雜。

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

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

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

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

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

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

@my_info
def my_name():
  print "Yi_Zhi_Yu"

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

my_name()
#218
#Yi_Zhi_Yu

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

因?yàn)檠b飾器也是個(gè)函數(shù), 那么裝飾器自己的能不能有參數(shù)傳遞呢??梢?, 不過(guò)需要定義一個(gè)更高階的函數(shù), 也就是外面還要套一層函數(shù), 比如, 我還要輸出我的自定義的一個(gè)信息,需要傳遞參數(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

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

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

相關(guān)文章

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

    pytorch visdom安裝開啟及使用方法

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

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

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

    Python進(jìn)行圖片驗(yàn)證碼識(shí)別方法步驟

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

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

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

    Python中音頻處理庫(kù)pydub的使用教程

    這篇文章主要給大家介紹了關(guān)于Python中音頻處理庫(kù)pydub的使用教程,pydub是Python中用戶處理音頻文件的一個(gè)庫(kù),文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • Python中的類與對(duì)象之描述符詳解

    Python中的類與對(duì)象之描述符詳解

    這篇文章主要介紹了Python中的描述符詳解,屬于Python學(xué)習(xí)過(guò)程中類與對(duì)象的基本知識(shí),需要的朋友可以參考下
    2015-03-03
  • python -v 報(bào)錯(cuò)問(wèn)題的解決方法

    python -v 報(bào)錯(cuò)問(wèn)題的解決方法

    在本篇文章里小編給大家整理了關(guān)于python -v 報(bào)錯(cuò)問(wèn)題的解決方法及相關(guān)知識(shí)點(diǎn),有興趣的朋友們可以學(xué)習(xí)下。
    2020-09-09
  • Python使用argcomplete模塊實(shí)現(xiàn)自動(dòng)補(bǔ)全

    Python使用argcomplete模塊實(shí)現(xiàn)自動(dòng)補(bǔ)全

    argcomplete?是一個(gè)強(qiáng)大的Python庫(kù),可以大幅改善命令行應(yīng)用程序的用戶體驗(yàn),本文主要介紹了argcomplete模塊的相關(guān)用法,感興趣的小伙伴可以了解下
    2023-11-11
  • PyCharm中配置PySide2的圖文教程

    PyCharm中配置PySide2的圖文教程

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

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

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

最新評(píng)論

鄂伦春自治旗| 临安市| 兰西县| 舞阳县| 四平市| 盐亭县| 通化县| 林芝县| 仙居县| 西乌珠穆沁旗| 安福县| 望奎县| 长岭县| 绍兴县| 吉安市| 遵义县| 红原县| 石林| 永济市| 长阳| 青浦区| 锡林郭勒盟| 堆龙德庆县| 同心县| 甘洛县| 昭平县| 南澳县| 邹城市| 龙山县| 济阳县| 温州市| 黄陵县| 韩城市| 论坛| 益阳市| 青冈县| 隆尧县| 弥勒县| 淅川县| 塔城市| 洪江市|