Курс 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. Работа с геоданными с помощью geopy
  2. Изменение IP-адреса в Python
  3. Автоматизация действий с Pyautogui
  4. Преобразование числа в список цифр
  5. split() без разделителя
  6. Проверка версии Python
  7. Цикл for с enumerate() в Python
  8. Генераторы в Python
  9. Создание и обучение модели с Keras
  10. Пересечение списков с использованием множеств
  11. Создание списка через цикл
  12. Работа со строками
  13. Метод count() для списка
  14. Функция map() в Python
  15. Генераторы данных
  16. Работа со словарями в Python
  17. Метод Enumerate() для списков
  18. Разделение списка на гнппы
  19. Отправка HTTP-запросов с User-Agent
  20. Метод join() для объединения элементов строки
  21. Бесконечные списки в Python
  22. Модуль array: создание и использование массивов
  23. Разделение строки с помощью split()
  24. Сравнение строк в Python
  25. Список переменных в Python
  26. Поиск наиболее частого элемента
  27. Метод invert для побитового отрицания
  28. Объединение итераторов
  29. Конструктор в Python
  30. Генераторы в Python
  31. Повторение элементов списков
  32. Переопределение метода __eq__
  33. Шаблоны и наследование в Flask
  34. Получение комбинаций в Python
  35. Цикл for в Python
  36. Обмен значений переменных в Python
  37. Функции с дополнением
  38. Встроенные функции Python
  39. Генераторы в Python
  40. Создание треугольника Паскаля
  41. Подсчет вхождений элементов
  42. Удаление ресурса в Python
  43. Улучшение читаемости кода в Python
  44. Основные операции с библиотекой Numpy
  45. Вызов функций по строке в Python.
  46. Работа с библиотекой xkcd
  47. Карта бомбоубежищ в Москве и Питере
  48. Преобразование текста в речь с Python
  49. Методы classmethod и staticmethod

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