我注意到 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 的解析值,导致每次返回相同实例中的相同值。
请您参考如下方法:
你明白了,但是在 vanilla python 中没有编译。 :) 这是引自“The Hitchhiker's Guide to Python”的引文:
Python’s default arguments are evaluated once when the function is defined, not each time the function is called (like it is in say, Ruby). This means that if you use a mutable default argument and mutate it, you will and have mutated that object for all future calls to the function as well.