Re: [問題] default value for arguments..

看板Python作者 (酷狗喵千代)時間16年前 (2009/01/28 07:50), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/4 (看更多)
※ 引述《dimen (一人吃二人補)》之銘言: : hi, all: : 我在國外的某個blog上看到一篇文章: : http://tinyurl.com/8t73xp : : 裡面的一段程式碼: : >>> class Foo(object): : ... def __init__(self, name='', stuff=[]): Python 在定義函式/方法的時候會進行評估 (evaluation) stuff=[] 中的 [] 等同於 list(),會建立一個 list 的實體 然後這個 list 實體再指定給 stuff 變數 (在此為函式參數) : ... self.name = name : ... self.stuff = stuff stuff 參數所指涉的 list 物件又被指定給 self.stuff 但注意,都是同一個 list 實體 : ... : ... def add_stuff(self, gadget): : ... self.stuff.append(gadget) : ... : >>> f = Foo() : >>> f.add_stuff('tree') : >>> f.stuff : ['tree'] : >>> g = Foo() : >>> g.stuff : ['tree'] 如果再加一行 f.stuff == g.stuff,你會發現此表達式為真 為什麼?因為在 Foo 類別的 constructor (Foo.__init__) 中 self.stuff 是被指定給「同一個 list 實體」 該 list 實體是在定義 Foo.__init__ 的時候就建出來的 : 這結果跟我之前學的OOP有些不同..沒實際執行一次,我會以為g.stuff應該是[] 這和 OOP 完全無關,而是 Python 評估 function/method definition 的特性使然 -- 多寫才會懂這種特性就是了 ... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 76.181.246.83
文章代碼(AID): #19VvskrK (Python)
文章代碼(AID): #19VvskrK (Python)