Python中函数的默认值
这个问题在这里已经有了答案:
是的,这是正确的行为。
然而,从你的问题来看,这似乎并不是你所期望的。
如果您希望它符合您的期望,请注意以下事项:
规则1.不要使用可变对象作为默认值。
def anyFunction( arg=[] ):
不会创建一个新的列表对象。 arg
的默认列表对象将在整个地方共享。
同样
def anyFunction( arg={} ):
将不会创建一个新的字典对象。 这个默认字典将被共享。
class MyClass( object ):
def __init__( self, arg= None ):
self.myList= [] if arg is None else arg
这是提供默认参数值的常用方法,该参数值是新鲜的空列表对象。
这是一个经典的陷阱。 请参阅http://zephyrfalcon.org/labs/python_pitfalls.html,第5节:“可变默认参数”
然后总是做这样的功能:
def __init__ ( self, data = None ):
if data is None:
data = []
self._data = data
或者,您也可以使用data = data or []
,但是这会阻止用户传递空参数( ''
, 0
, False
等)。
上一篇: Default value in a function in Python
下一篇: Python constructor does weird things with optional parameters