<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                **裝飾器 decorator** 裝飾器其本質就是一個函數,同樣使用 def 定義。 那它與與他函數有什么區別呢? 普通函數是實現某種特定功能,裝飾器是為被裝飾的函數添加附加功能,而不需去修改原函數(錦上添花)。 裝飾器特點: 1. 不修改被裝飾的原函數 2. 不修改被裝飾的原函數的調用方式 來個小示例: 假如你開發了一套后臺管理系統,有下面幾個功能: ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- def addUser(): print('添加用戶成功') def delUser(): print('刪除用戶成功') ~~~ 程序運行了一段時間,領導想知道調用每種方法的時間日志,你就開始編寫代碼 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- import time def log(funName): time_str = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime()) print("[%s] 執行了 %s 方法" % (time_str, funName)) def addUser(): log(addUser.__name__) print('添加用戶成功') def delUser(): log( delUser.__name__) print('刪除用戶成功') ~~~ 你信心滿滿的把代碼提交到代碼托管平臺上,過了會,項目經理把你叫到辦公室對你說:雖然你實現了功能,但是更改了生產環境中的代碼,這就違反了軟件開發中“開放-封閉”原則,即:已經實現的功能代碼不允許被修改,但可以被擴展 * 封閉:已實現的功能代碼塊不應該被修改 * 開放:對現有功能的擴展開放 于是 ,你就想到了《跟老司機學Python》這章說的裝飾器這種東西,完全符合 “開放-封閉”原則,繼續修改代碼 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- import time def log(func): def warpper(*args, **kwargs): time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print("[%s] 執行了 %s 方法" %(time_str,func.__name__)) func(*args, **kwargs) return warpper @log #第一個 def addUser(): print('添加用戶成功') @log #第二個 def delUser(): print('刪除用戶成功') ~~~ 在函數的章節我們已經知道 : 函數即變量 對上面代碼中的兩個 @log 進行說明 ~~~ 第一個 @log 相當于 log(addUser) 第二個 @log 相當于 log(delUser) ~~~ 從上面的程序可以看出:**裝飾器** 就是 **高階函數** 與 **嵌套函數** 的應用 這次提交代碼后,經理感覺你做的不錯,又提出了讓你添加是誰操作了每種方法的日志,你又接著修改代碼 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- import time name = 'air'#假設這是你存儲在 session 中的名字 def loger(who): def log(func): def warpper(*args,**kwargs): time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) print("%s 在 [%s] 執行了 %s 方法" %(who,time_str,func.__name__)) func(*args, **kwargs) return warpper return log @loger(name) def addUser(): print('添加用戶成功') @loger(name) def delUser(): print('刪除用戶成功') addUser() delUser() ~~~ 最終調用結果 ~~~ air 在 [2017-10-06 17:14:17] 執行了 addUser 方法 添加用戶成功 air 在 [2017-10-06 17:14:17] 執行了 delUser 方法 刪除用戶成功 ~~~ 小伙子干的不錯,就等著升職加薪走上人生巔峰吧! 總結: decorator 可以增強函數的功能,雖然編寫起來有點復雜,但是使用起來非常方便靈活。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看