python – 可变函数参数默认值的好用法?

将mutable对象设置为函数中参数的默认值是一个常见的错误。以下是从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

现在我的问题:这个语法有很好的用例吗?我的意思是,如果每个遇到它的人都犯同样的错误,调试它,理解这个问题,从中尝试避免它,这样的语法有什么用?

您可以使用它在函数调用之间缓存值:

def get_from_cache(name, cache={}):
    if name in cache: return name
    cache[name] = result = expensive_calculation()
    return result

但是通常这样的事情可以用一个类来完成,因为你可以有其他属性来清除缓存等。

http://stackoverflow.com/questions/9158294/good-uses-for-mutable-function-argument-default-values

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:python – 可变函数参数默认值的好用法?