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

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

2 ответа

Решение

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

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

Давайте посмотрим на пример:

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}
Другие вопросы по тегам