我注意到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/