Курс Python → Проблема с изменяемыми аргументами

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

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

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


def example_function(my_list=[]):
    my_list.append(1)
    return my_list

print(example_function()) # [1]
print(example_function()) # [1, 1]

В данном примере функция example_function использует список в качестве аргумента по умолчанию. При первом вызове функции список будет содержать один элемент [1]. Однако, при последующем вызове функции, список уже будет содержать два элемента [1, 1], так как значение по умолчанию изменилось после первого вызова.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Копирование словарей и списков в Python
  2. Работа с модулем bisect
  3. Экспорт внешнего файла с помощью writefile
  4. Форматирование чисел в Python
  5. Группировка элементов Python
  6. Анонимные функции Lambda
  7. Сравнение def и lambda функций в Python
  8. Цикл for в Python
  9. Объединение списков в Python.
  10. Кортеж в Python: создание, доступ, изменение
  11. Особенности множеств в Python
  12. Хеши в Python
  13. Обучение модели с указанием эпох
  14. Генерация тестовых данных с factory_boy
  15. Изменения в обработке логических значений
  16. Метод rrshift для пользовательских объектов
  17. Управление мышью и клавиатурой с Pyautogui
  18. Регистрация на хакатоне
  19. Перевернуть список в Python
  20. Оператор объединения словарей
  21. Импортирование в Python
  22. Вложенные функции в Python
  23. Удаление символа из строки
  24. Управление импортом в Python
  25. Форматирование строк в Python
  26. Уникальные значения из списка
  27. Работа с модулем os в Python
  28. Декоратор total_ordering для сравнения объектов
  29. Преобразование данных в Python
  30. Установка и обучение ChatterBot
  31. Работа с библиотекой xkcd
  32. Профилирование с Pandas
  33. Оператор морж в Python 3.8
  34. Определение функций с необязательными аргументами
  35. Получение обратного списка чисел
  36. Flask: создание веб-приложений
  37. Отслеживание прогресса с tqdm
  38. Тестирование с responses
  39. Поиск подстроки в строке
  40. Flask — веб-фреймворк Python
  41. Блок try-except-else
  42. Вывод баннеров
  43. Просмотр внешнего файла в Python
  44. Генераторы в Python
  45. Работа с deque из collections

Marketello читают маркетологи из крутых компаний