Python中的可变默认方法参数

可能重复:
Python中的“最小惊讶”:可变的默认参数

我使用的是Python IDE PyCharm,默认情况下,它有一个默认值为mutbale类型时会显示警告。 例如,当我有这个:

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']

正如我上面所说,这可能不是你想要的。

链接地址: http://www.djcxy.com/p/28545.html

上一篇: Mutable Default Method Arguments In Python

下一篇: Mutable default arguments in Python