关于pycharm:Python中的可变默认方法参数

Mutable Default Method Arguments In Python

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
“Least Astonishment” in Python: The Mutable Default Argument

我使用的是python-ide-pycharm,默认情况下,当我使用mutbale类型作为默认值时,它将显示警告。例如,当我有这个:

1
def status(self, options=[]):

Pycharm希望它看起来像:

1
2
def status(self, options=None):
    if not options: options = []

我的问题是,这是否是在Python社区中做事情的一种标准方法,还是Pycharm认为应该这样做?将可变数据类型作为默认方法参数有什么缺点吗?


这是正确的方法,因为每次调用同一方法时都使用相同的可变对象。如果可变对象随后被更改,那么默认值可能不会是它的原意。

例如,以下代码:

1
2
3
4
5
6
7
def status(options=[]):
    options.append('new_option')
    return options

print status()
print status()
print status()

将打印:

1
2
3
['new_option']
['new_option', 'new_option']
['new_option', 'new_option', 'new_option']

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