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

Python多層裝飾器用法實(shí)例分析

 更新時(shí)間:2018年02月09日 10:55:10   作者:路雖遠(yuǎn)在路上  
這篇文章主要介紹了Python多層裝飾器用法,結(jié)合實(shí)例形式簡(jiǎn)單分析了Python多層裝飾器的相關(guān)使用方法與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python多層裝飾器用法。分享給大家供大家參考,具體如下:

前言

Python 的裝飾器能夠在不破壞函數(shù)原本結(jié)構(gòu)的基礎(chǔ)上,對(duì)函數(shù)的功能進(jìn)行補(bǔ)充。當(dāng)我們需要對(duì)一個(gè)函數(shù)補(bǔ)充不同的功能,可能需要用到多層的裝飾器。在我的使用過(guò)程中,遇到了兩種裝飾器層疊的情況,這里把這兩種情況寫(xiě)下來(lái),作為踩坑記錄。

情況1

def A(funC):
  def decorated_C(funE):
    def decorated_E_by_CA(*args, **kwargs):
      out = funC(funE)(*args, **kwargs)
      return out +' > decorated by A'
    return decorated_E_by_CA
  return decorated_C
@A
def C(funE):
  def decorated_E_by_C(str):
    return funE(str)+' > decorated by C'
  return decorated_E_by_C
@C
def E(str):
  return str
print E('A string is ')

這種情況下首先 E(str) = C(E)(str),然后由于C = A(C),還有 E(str) = A(C)(E)(str)。這么一來(lái)他們的關(guān)系就明確了,裝飾器 A 裝飾的是裝飾器 C,它返回了一個(gè)被裝飾過(guò)的裝飾器,而被裝飾過(guò)的裝飾器又可以去裝飾函數(shù) E。在上面的代碼中,decorated_C 就是一個(gè)被裝飾過(guò)的裝飾器。

情況2

def A(funE_decorated_by_C):
  def redecorated_E(str):
    return funE_decorated_by_C(str)+' > redecorated by A'
  return redecorated_E
def C(funE):
  def decorated_E(str):
    return funE(str)+' > decorated by C'
  return decorated_E
@A
@C
def E(str):
  return str
print E('A string is ')

這種情況下,有 E(str) = A(C(E))(str)。首先裝飾器 C 裝飾函數(shù) E,返回一個(gè)被 C 裝飾過(guò)的函數(shù),然后裝飾器 A 再裝飾這個(gè)被 C 裝飾過(guò)的函數(shù)。與第一種情況的區(qū)別是,這里的裝飾器 A 裝飾的是一個(gè)函數(shù),而不是一個(gè)裝飾器

更多關(guān)于Python相關(guān)內(nèi)容可查看本站專(zhuān)題:《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python Socket編程技巧總結(jié)》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

最新評(píng)論

阿克苏市| 东乌| 来安县| 江达县| 白银市| 绥德县| 万荣县| 长岭县| 女性| 昌图县| 桂平市| 双辽市| 广宁县| 屯留县| 罗山县| 河南省| 斗六市| 盖州市| 罗定市| 怀宁县| 大城县| 车致| 鄱阳县| 辽中县| 鞍山市| 蓬安县| 承德市| 亳州市| 南和县| 和静县| 射阳县| 岑溪市| 石景山区| 焦作市| 东源县| 太原市| 巴彦淖尔市| 绥阳县| 会泽县| 青河县| 佛坪县|