Middle
154
Warum ist die Verwendung von veränderbaren Objekten als Standardparameter eine schlechte Praxis? Geben Sie ein Beispiel für einen fehlgeschlagenen Fall und beschreiben Sie, wie man ihn beheben kann.
Antwort von AI
sobes.tech KI
Использование изменяемых объектов (списков, словарей, множеств) в качестве параметров по умолчанию приводит к тому, что значение по умолчанию создается один раз при определении функции. При каждом вызове функции без явного указания значения этого параметра, будет использоваться тот же экземпляр объекта. Последующие изменения этого объекта в одном вызове функции будут сохраняться и влиять на следующие вызовы.
Пример неудачного случая:
# Плохая практика: список как параметр по умолчанию
def add_item_bad(item, data=[]):
data.append(item)
return data
# Результат первого вызова
result1 = add_item_bad("apple")
print(result1)
# Результат второго вызова - список сохранился
result2 = add_item_bad("banana")
print(result2)
# Ожидали ["cherry"], но получили ["apple", "banana", "cherry"]
result3 = add_item_bad("cherry")
print(result3)
Как исправить:
Использовать неизменяемый объект (обычно None) в качестве значения по умолчанию и инициализировать изменяемый объект внутри функции, если параметр не был передан.
# Хорошая практика: None как параметр по умолчанию
def add_item_good(item, data=None):
if data is None:
data = [] # Инициализация нового списка при необходимости
data.append(item)
return data
# Результат первого вызова
result1_good = add_item_good("apple")
print(result1_good)
# Результат второго вызова - новый список
result2_good = add_item_good("banana")
print(result2_good)
# Ожидаемый результат ["cherry"]
result3_good = add_item_good("cherry")
print(result3_good)