Re: [問題] default value for arguments..
※ 引述《yungyuc (酷狗喵千代)》之銘言:
: ※ 引述《dimen (一人吃二人補)》之銘言:
: : hi, all:
: : 我在國外的某個blog上看到一篇文章:
: : http://tinyurl.com/8t73xp
: : 裡面的一段程式碼:
: : ... 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)
: : ...
: : ['tree']
: : ['tree']
: 如果再加一行 f.stuff == g.stuff,你會發現此表達式為真
: 為什麼?因為在 Foo 類別的 constructor (Foo.__init__) 中
: self.stuff 是被指定給「同一個 list 實體」
: 該 list 實體是在定義 Foo.__init__ 的時候就建出來的
這裡應該使用 is operator 才證明兩者是同一個物件。
f.stuff is g.stuff
: : 這結果跟我之前學的OOP有些不同..沒實際執行一次,我會以為g.stuff應該是[]
: 這和 OOP 完全無關,而是 Python 評估 function/method definition 的特性使然
這個例子可以強調 Python 只有 statement 沒有 declaration 的特性。
def __init__(self, name='', stuff=[]):
self.name = name
self.stuff = stuff
上述這個 def statement 執行完成後產生了一個 function object,bind 在
class namespace 中的 "__init__" 名稱;這個 function object construction
過程只有發生一次,所以 stuff=[] 這個 expression 也只 evaluate 一次,而
不是每次此 function 被執行時都 evaluate 一次。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.173.133.197
推
01/28 20:21, , 1F
01/28 20:21, 1F
推
01/29 00:58, , 2F
01/29 00:58, 2F
推
01/29 02:55, , 3F
01/29 02:55, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):