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)
这是提供默认参数值的常用方法,该值是一个新的空列表对象.
| 归档时间: |
|
| 查看次数: |
2890 次 |
| 最近记录: |