Подтвердить что ты не робот

Почему пустым словарем является опасное значение по умолчанию в Python?

Я помещаю пустые фигурные скобки в качестве значения по умолчанию для необязательного аргумента функции Python, а pylint (используя пакет Sublime) сказал мне, что это опасно. Может кто-нибудь объяснить, почему это так? И лучше ли вместо этого использовать None?

4b9b3361

Ответ 1

Это опасно, только если ваша функция изменит аргумент. Если вы измените аргумент по умолчанию, он будет сохраняться до следующего вызова, поэтому ваш "пустой" dict начнет содержать значения при вызовах, отличных от первого.

Да, использование None является безопасным и обычным в таких случаях.

Ответ 2

Посмотрим на пример:

def f(value, key, hash={}):
    hash[value] = key
    return hash

print f('a', 1)
print f('b', 2)

Что вы, вероятно, ожидаете вывести:

{'a': 1}
{'b': 2}

Но на самом деле выходы:

{'a': 1}
{'a': 1, 'b': 2}