我注意到了我在python中对kwargs没有想到的效果,我想确认我已经完全理解它/获得更好的理解。
我的示例代码
class Obj(object):
pass
def Foo(kwarg=Obj()):
return kwarg
def Bar(kwarg=None):
if not kwarg:
kwarg = Obj()
return kwarg
现在我才明白,最近这些功能会有所不同。
除非在调用kwarg时传递,否则Foo每次都会返回相同的Obj实例,而Bar每次都会返回不同的Obj实例。
是否会发生这种情况,因为关键字参数在编译时被分配给其RHS的已解析值,导致每次返回的同一实例中都是相同的。
答案 0 :(得分:2)
你知道了,但是在vanilla python中没有编译。 :)这是引用形式“The Hitchhiker's Python指南”:
Python的默认参数在定义函数时被计算一次,而不是每次调用函数时(比如Ruby)。这意味着如果你使用一个可变的默认参数并对其进行变异,那么你将会对该对象进行变异,以便将来调用该函数。