我正在使用Python IDE PyCharm,它默认会在具有可变类型的默认值时显示警告。例如,当我有这个:
def status(self, options=[]):
PyCharm 希望它看起来像:
def status(self, options=None):
if not options: options = []
我的问题是这种做法是否是Python社区的标准方式,还是仅仅是PyCharm认为应该这样做?使用可变数据类型作为默认方法参数有哪些缺点?
我正在使用Python IDE PyCharm,它默认会在具有可变类型的默认值时显示警告。例如,当我有这个:
def status(self, options=[]):
PyCharm 希望它看起来像:
def status(self, options=None):
if not options: options = []
我的问题是这种做法是否是Python社区的标准方式,还是仅仅是PyCharm认为应该这样做?使用可变数据类型作为默认方法参数有哪些缺点?
这是正确的方法,因为每次调用相同的方法时都使用了相同的可变对象。如果在可变对象之后更改了内容,则默认值可能不会如预期般保持不变。
例如,下面的代码:
def status(options=[]):
options.append('new_option')
return options
print status()
print status()
print status()
['new_option']
['new_option', 'new_option']
['new_option', 'new_option', 'new_option']
正如我之前所说的,这可能不是您正在寻找的内容。