作者yungyuc (酷狗喵千代)
看板Python
标题Re: [问题] default value for arguments..
时间Wed Jan 28 07:50:05 2009
※ 引述《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