Курс 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. Конвертация текстовых чисел с помощью Numerizer
  3. Таймер обратного отсчета
  4. Декораторы с @wraps
  5. Значения по умолчанию в Python
  6. Красивый вывод списка
  7. Добавление элементов в список: append() vs extend()
  8. Monkey Patching в Python
  9. Строки в Python: апострофы и кавычки
  10. Создание треугольника Паскаля
  11. Метод __ilshift__ для битового сдвига влево
  12. Удаление элементов из списка в Python
  13. Работа с аргументами командной строки
  14. Аннотации типов в Python
  15. Установка и использование Telegram API в Python
  16. 9 уловок для чистого кода
  17. Проверка ввода с помощью isdigit
  18. Создание пар из последовательностей
  19. Работа с кортежами
  20. Отладка регулярных выражений в Python
  21. Определение функций с необязательными аргументами
  22. Оператор space-invader
  23. Отслеживание выполнения программы с библиотекой tqdm
  24. Передача аргументов в Python
  25. Глобальные переменные в Python
  26. Defaultdict в Python
  27. Создание namedtuple из словаря
  28. Копирование в Python
  29. Генераторы данных
  30. Именованные кортежи в Python
  31. Условные выражения в Python
  32. Переименование файлов в Python
  33. Атрибуты класса и экземпляра
  34. Метод remove() для удаления элемента из списка
  35. Показ всплывающих окон Tkinter
  36. Создание копии итератора
  37. Многопоточность и асинхронное программирование в Python
  38. Названия столбцов в Python таблицах
  39. Применение функции к списку
  40. Склеивание строк через метод join()
  41. JMESPath в Python
  42. Сортировка и обратный порядок
  43. Оператор Walrus: правильное использование
  44. Использование функции enumerate()
  45. Сравнение def и lambda в Python
  46. Нахождение пересечения множеств

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