[Python讀書]cookbook –20.1 在函數調用中獲得常新的預設值

來源:互聯網
上載者:User

一直都沒看裝飾器今天翻了cookbook看了一段,愣是沒看懂

20.1 在函數調用中獲得常新的預設值

任務:當函數的def語句執行之後,Python為函數的選擇性參數計算預設值,但只做了一次,然而

,對於某些函數,你希望每次函數被調用,預設值都是新計算出來的

代碼如下

import copydef freshdefaults(f):    "一個封裝f的裝飾器,可使其預設值在調用時保持常新"    fdefaults = f.func_defaults    def refresher(*args, **kwds):        f.func_defaults = copy.deepcopy(fdefaults)        return f(*args,**kwds)    return refresher#@freshdefaultsdef packitem(item,pkg=[]):    pkg.append(item)    return pkg         a = packitem(1)b = packitem(2)print id(a),a print id(b),b '''使用裝飾器得到的結果47262256 [1]47263336 [2]''''''不使用裝飾器得到的結果45811952 [1, 2]45811952 [1, 2]'''

開始確實沒懂啥意思,後來經過調試明白了一些,結果很顯然了吧,就是預設值的範圍的問題,或者深度拷貝和淺拷貝的問題。

是b即將到得值時的調試資訊

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.