Курс 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. Метод enumerate() в Python
  2. Работа с collections в Python.
  3. Копирование файлов с shutil()
  4. Создание новых списков через list comprehensions
  5. Проверка дублей в списке.
  6. Подсчет элементов в Python
  7. Функция product() в Python
  8. Улучшенные подсказки для импорта в Python 3.12
  9. Условные выражения в Python
  10. Закрытие файла в Python
  11. Удаление символов новой строки в Python.
  12. Подсчет элементов с помощью Counter из collections
  13. Математические функции в Python
  14. Генераторы списков в Python
  15. Декораторы в Python
  16. Работа с парами ключ-значение
  17. Декоратор Ajax required
  18. Метод __getitem__ в Python
  19. Объединение словарей в Python
  20. Проверка подстроки в строке с помощью in
  21. Атрибуты класса и экземпляра
  22. Генераторы в Python
  23. Создание уникального проекта
  24. Метод lt для сортировки объектов
  25. Генераторные функции в Python
  26. Работа с массивами в Numpy
  27. Установка и использование Python-dateutil
  28. Порядок и длина множеств в Python
  29. Роль запятой в Python
  30. Аргументы *args и **kwargs
  31. Python Аргументы по умолчанию
  32. Пересечение списков с использованием множеств
  33. Lambda Functions in Python
  34. Объединение списков с использованием itertools.chain
  35. Метод join() для объединения элементов
  36. Управление виртуальными окружениями в Python
  37. Форматирование строк в Python
  38. Обезопасьте ввод данных
  39. Метод rmatmul для обратного матричного умножения
  40. Работа с библиотекой xkcd
  41. Создание тестовых данных с Faker
  42. Создание виртуальной среды
  43. Расширение информации об ошибке в Python
  44. Метод ne для сравнения объектов
  45. Преобразование Excel в PDF с Spire.XLS
  46. Сортировка HTML-элементов
  47. Разделение строк в Python
  48. Форматирование данных с помощью pprint

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