Re: [問題] default value for arguments..
※ 引述《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
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章