我注意到python中的kwargs没想到有什么效果,我想确认自己已经完全理解/得到了更好的理解。

我的示例代码

class Obj(object):
    pass

def Foo(kwarg=Obj()):
     return kwarg

def Bar(kwarg=None):
     if not kwarg:
         kwarg = Obj()
     return kwarg


现在,我才了解到最近这些功能的功能有所不同。

除非在调用kwarg时传递了kwarg,否则Foo每次将返回相同的Obj实例,而Bar每次将返回不同的Obj实例。

发生这种情况是因为在编译时将关键字参数分配给其RHS的解析值,导致每次都在同一实例中返回相同的值。

最佳答案

知道了,但是香草python中没有编译。 :)这是“ Python的旅行者指南”的引用形式:


  定义函数时,Python的默认参数只计算一次,而不是每次调用函数(例如Ruby)都会被求值。这意味着,如果您使用可变的默认参数并对其进行了突变,那么您将来也将对该对象进行该变量的所有将来的调用。


http://docs.python-guide.org/en/latest/writing/gotchas/

关于python - Python Kwarg共享实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42000125/

10-12 07:11