Re: [問題] function 的預設值

看板Python作者 (進擊的三笠)時間11年前 (2014/12/17 23:19), 編輯推噓0(001)
留言1則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《ql4au04 (泡麵)》之銘言: : 今天在練習function時,發現在不同情況下, : function的預設值會不同 (略 : 後來看memory address的差異時發現, : v1在 x = 100 後, x的memory address和spam回傳的address不同 : v2在 x.append('hello')後,x的memory address和spam_2回傳的address相同 : 我的理解是 python的每個值都是object : 賦值是改變address : 所以x=40,是把x只向另一個address : 而.append是對現有的object做改變 : 所以x.append('hello'),是更改現在address內的值 : 想請問大家,這樣的解釋是否正確?還是有其他的解釋呢? Python的變數名稱是container, 指向某一物件 而每個物件有其id, type, value 像int, string 等value 不能改變的型態為Immutable Object 反之為 Mutable Object, 如list 在編譯的時候, 對function的預設值(empty list)產生一個物件 之後每次call這個function 就會指向該物件 所以在 x = spam_2(1) 時, x 指向該物件(empty list) 而 x.append('hello') 使得 function預設值物件的value改為 ['hello'] 避免這問題可以把function改寫成 def spam_2(a, b=None): if b is None: b = [] return b -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.224.138.98 ※ 文章網址: http://www.ptt.cc/bbs/Python/M.1418829575.A.DDF.html

12/21 06:14, , 1F
感謝您的解答!!
12/21 06:14, 1F
文章代碼(AID): #1KaPy7tV (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1KaPy7tV (Python)