可变函数参数默认值的好用途?

2022-01-21 00:00:00 python arguments default-value mutable

问题描述

将可变对象设置为函数中参数的默认值是 Python 中的常见错误.下面是一个示例,取自 David Goodger 的这篇出色的文章:

It is a common mistake in Python to set a mutable object as the default value of an argument in a function. Here's an example taken from 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']

发生这种情况的原因是这里.

The explanation why this happens is here.

现在我的问题是:这种语法有很好的用例吗?

我的意思是,如果遇到它的每个人都犯了同样的错误,调试它,理解问题并从那里尝试避免它,那么这种语法有什么用?

I mean, if everybody who encounters it makes the same mistake, debugs it, understands the issue and from thereon tries to avoid it, what use is there for such syntax?


解决方案

你可以使用它来缓存函数调用之间的值:

You can use it to cache values between function calls:

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

但通常这类事情用类做得更好,因为你可以有额外的属性来清除缓存等.

but usually that sort of thing is done better with a class as you can then have additional attributes to clear the cache etc.

相关文章