import inspect
class Test:
def test(self, p, d={}):
d.update(p)
return d
print inspect.getargspec(getattr(Test, 'test'))[3]
print Test().test({'1':True})
print inspect.getargspec(getattr(Test, 'test'))[3]
Run Code Online (Sandbox Code Playgroud)
我希望Test.test的argspec不会改变,但是因为dict.update它会改变.为什么?
因为dicts是可变对象.当你打电话时d.update(p),你实际上正在改变dict的默认实例.这是一个常见的问题; 特别是,你应该从来没有使用可变对象作为参数列表中的默认值.
更好的方法是:
class Test:
def test(self, p, d = None):
if d is None:
d = {}
d.update(p)
return d
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
263 次 |
| 最近记录: |