<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                [TOC] # 簡介 假設我們要增強now()函數的功能,比如,在函數調用前后自動打印日志,但又不希望修改now()函數的定義,這種在代碼運行期間動態增加功能的方式,稱之為“裝飾器”(Decorator)。 本質上,decorator就是一個返回函數的高階函數。所以,我們要定義一個能打印日志的decorator,可以定義如下: ~~~ def log(func): def wrapper(*args, **kw): print('call %s():' % func.__name__) return func(*args, **kw) return wrapper ~~~ 觀察上面的log,因為它是一個decorator,所以接受一個函數作為參數,并返回一個函數。我們要借助Python的@語法,把decorator置于函數的定義處: ~~~ @log def now(): print('2015-3-25') ~~~ 調用now()函數,不僅會運行now()函數本身,還會在運行now()函數前打印一行日志: ~~~ >>> now() call now(): 2015-3-25 ~~~ 把`@log`放到now()函數的定義處,相當于執行了語句: ~~~ now = log(now) ~~~ # 多個裝飾器 外函數由下面先執行,內函數由上面先執行 ~~~ def add_qx(func): print('---開啟進行裝飾權限1的功能---') def call_func(*args, **kwargs): print('---這是權限驗證1---') return func(*args, **kwargs) return call_func def add_xx(func): print('---開啟進行裝飾xx的功能---') def call_func(*args, **kwargs): print('---這是xx的功能---') return func(*args, **kwargs) return call_func @add_qx @add_xx def test1(): print('test1---') test1() ~~~ 輸出 ~~~ ---開啟進行裝飾xx的功能--- ---開啟進行裝飾權限1的功能--- ---這是權限驗證1--- ---這是xx的功能--- test1--- ~~~ # 類裝飾 ~~~ class Test(object): def __init__(self, func): self.func = func def __call__(self): print('這里是裝飾器添加的功能') return self.func() @Test def get_str(): return 'hello' print(get_str()) ~~~ 輸出 ~~~ 這里是裝飾器添加的功能 hello ~~~ # 裝飾器傳參數 ~~~ def log(text): def decorator(func): def wrapper(*args, **kwargs): print('%s %s():' % (text, func.__name__)) return func(*args, **kwargs) return wrapper return decorator @log('execute') def now(): print('2015-3-25') ~~~ 執行結果如下: ~~~ >>> now() execute now(): 2015-3-25 ~~~ 和兩層嵌套的decorator相比,3層嵌套的效果是這樣的: ~~~ >>> now = log('execute')(now) ~~~
                  <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>

                              哎呀哎呀视频在线观看