Курс 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. Поиск индексов подстроки
  2. Метод сравнения объектов в Python
  3. Сглаживание списка
  4. Работа с файлами в Python
  5. Метод split() в Python
  6. Блок try…finally в Python
  7. Разность множеств
  8. Проверка памяти объекта
  9. Декораторы в Python
  10. Concrete Paths — метод .with_suffix()
  11. Оператор in для Python
  12. Flask — веб-фреймворк Python
  13. Работа с кортежами в Python
  14. JSON-esque в Python
  15. Управление асинхронными задачами на Python.
  16. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  17. Оператор del в Python
  18. Нахождение самого длинного слова в списке с помощью max
  19. Поиск шаблона в строке
  20. Тернарный оператор в Python
  21. Профилирование данных с Pandas
  22. Генераторы по генератору
  23. Сортировка в Python
  24. HTTP-запросы с библиотекой Requests
  25. Defaultdict в Python
  26. Склеивание строк через метод join()
  27. Генераторы в Python
  28. Копирование словарей и списков в Python
  29. Проверка версии Python
  30. Работа с множествами в Python
  31. Библиотека sh: использование команд bash в Python
  32. Преобразование строк в числа в Python
  33. Работа с IP-адресами в Python
  34. Получение обратного списка чисел
  35. Работа с getopt
  36. Метод setdefault() в Python
  37. Удаление дубликатов из списка с помощью dict.fromkeys
  38. Удаление пробелов методом translate()
  39. Сортировка данных с лямбда-функциями
  40. Python: динамическая типизация и проверка типов
  41. Навыки Python: строки, типы данных
  42. Метод get() для словарей
  43. Работа с контекстными переменными
  44. Метод __irshift__ для Python
  45. Динамические маршруты во Flask
  46. Логирование с Logzero
  47. Объединение словарей в Python
  48. Операции с датами в Python

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