在Python中,将可变对象设置为函数中参数的默认值是一个常见的错误。以下是从this excellent write-up by David Goodger中获取的示例:
>>> def bad_append(new_item, a_list=[]):
a_list.append(new_item)
return a_list
>>> print bad_append('one')
['one']
>>> print bad_append('two')
['one', 'two']
这种情况发生的原因是here。
现在我要问的是:这个语法有好的用例吗?
我的意思是,如果每个遇到这个问题的人都犯同样的错误,调试它,理解这个问题,并试图避免它,那么这种语法有什么用呢?
您可以使用它来缓存函数调用之间的值:
但通常这类事情在类中做得更好,因为您可以使用其他属性来清除缓存等
也许您没有改变可变参数,但需要可变参数:
(是的,我知道您可以在这种特殊情况下使用
config=()
,但我发现这不太清楚,也不太普遍。)使用
random
模块(实际上是可变的单例)作为其默认随机数生成器。相关问题 更多 >
编程相关推荐