Python中函数的默认值

rs1*_*rs1 9 python default-value

我注意到以下几点:

class c:
  def __init__(self, data=[]):
    self._data=data
a=c()
b=c()
a._data.append(1)
print b._data
[1]
Run Code Online (Sandbox Code Playgroud)

这是正确的行为吗?

S.L*_*ott 11

是的,这是正确的行为.

但是,从您的问题来看,它似乎不是您所期望的.

如果您希望它符合您的期望,请注意以下事项:

规则1.不要将可变对象用作默认值.

def anyFunction( arg=[] ):
Run Code Online (Sandbox Code Playgroud)

不会创建一个新的列表对象.arg将在整个地方共享默认列表对象.

同样

def anyFunction( arg={} ):
Run Code Online (Sandbox Code Playgroud)

不会创建一个新的dict对象.此默认字典将被共享.

class MyClass( object ):
    def __init__( self, arg= None ):
        self.myList= [] if arg is None else arg 
Run Code Online (Sandbox Code Playgroud)

这是提供默认参数值的常用方法,该值是一个新的空列表对象.

  • "永远不会工作."有点苛刻."每次通话时都不会给你一个新的空可变对象",看起来更平衡一点.如果您知道这种情况发生,您可能实际上想要使用此行为. (3认同)