Что покажет код и как его исправить?

def extend_list(value, lst=[]):
    lst.append(value)
    return lst


list1 = extend_list(10) 
list2 = extend_list(123, [])
list3 = extend_list('a')

print(list1) # [10, 'a']
print(list2) # [123]
print(list3) # [10, 'a']

Данный код может привести к неожиданным результатам из-за того, что используется изменяемый объект (список) в качестве значения по умолчанию аргумента функции. Пустой список [] в определении функции extend_list становится общим для всех вызовов этой функции, что может привести к нежелательному поведению.

def extend_list(value, lst=None):
    if lst is None:
        lst = []
    lst.append(value)
    return lst

list1 = extend_list(10)
list2 = extend_list(123, [])
list3 = extend_list('a')

print(list1)  # Выведет: [10]
print(list2)  # Выведет: [123]
print(list3)  # Выведет: ['a']

Теперь, вместо использования изменяемого объекта в виде значения по умолчанию, мы используем None и проверяем, был ли предоставлен список. Если не был, мы создаем новый пустой список внутри функции. Это гарантирует, что каждый вызов функции получает свой собственный список.

Last updated