Курс 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. Переопределение метода delitem в Python
  3. Функция reversed() в Python
  4. Метод enumerate() в Python
  5. Оператор «not» в Python
  6. Обработка аргументов Python
  7. Область видимости переменных
  8. Работа с getopt
  9. Добавление элемента в список.
  10. Удаление дубликатов из списка с помощью dict.fromkeys
  11. Частичное совпадение пользовательского ввода в Python 3.10
  12. Форматирование вывода списков
  13. Управление User-Agent в Python
  14. Комментарии в Python
  15. Отступы в Python
  16. Оператор in в Python
  17. Оператор == в Python
  18. Получение списка файлов в директории с использованием os
  19. Проверка класса объекта
  20. Цикл for в Python
  21. Работа с географическими данными.
  22. Генераторы в Python
  23. Обмен значений переменных в Python
  24. Профилирование данных с Pandas
  25. Метод ne для сравнения объектов
  26. Установка и использование модуля Wikipedia
  27. Выход из профиля в Django
  28. Тестирование с responses
  29. Создание списков в Python
  30. Метод __iand__ для пользовательских классов
  31. Работа с defaultdictами в Python
  32. Замена элементов в списке с помощью генераторов списков
  33. Автоматизация скриптов на AWS Lightsail.
  34. Обработка ошибок ввода данных
  35. Применение функции map() с лямбда-функциями
  36. Синхронизация потоков с time.sleep()
  37. Глубокое копирование объектов
  38. Настройка шрифта и цвета в Tkinter
  39. Метод __ilshift__ для битового сдвига влево
  40. Параллельные вычисления в Python
  41. Подсчет элементов в Python
  42. Работа с кортежами

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