Курс Python → Избегайте изменяемых аргументов

Один из распространенных источников ошибок при работе с функциями в Python — это использование изменяемых аргументов по умолчанию. Когда мы определяем функцию с аргументом по умолчанию, который является изменяемым объектом, таким как список или словарь, мы должны быть осторожны. При каждом вызове функции изменяемый аргумент по умолчанию не инициализируется заново, а используется последнее значение, которое было ему присвоено. Это может привести к неожиданным результатам, если мы не учитываем это поведение.

Давайте рассмотрим пример. У нас есть функция some_func, которая принимает аргумент default_arg со значением по умолчанию []. Если мы вызовем эту функцию без явного указания значения для default_arg, то при каждом вызове будет использоваться один и тот же список, который был инициализирован при определении функции. Если мы внутри функции изменим этот список, то он будет сохранен для последующих вызовов функции.


def some_func(arg=default_arg):
    arg.append(1)
    return arg

print(some_func())  # [1]
print(some_func())  # [1, 1]

Чтобы избежать подобных проблем, рекомендуется использовать неизменяемые объекты в качестве аргументов по умолчанию или создавать новый изменяемый объект внутри функции при каждом вызове. Например, вместо использования списка как аргумента по умолчанию, мы можем использовать None и внутри функции создать новый список, если аргумент не был передан.

Приведенный выше пример демонстрирует важность понимания того, как работают изменяемые аргументы по умолчанию в Python. Избегайте использования изменяемых объектов в качестве аргументов по умолчанию, если вы не уверены, как это поведение может повлиять на ваш код. Будьте внимательны и всегда тестируйте свой код, чтобы избежать неожиданных результатов.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Генерация случайных чисел Python
  2. Обновление ключей в Python
  3. Вычисление натурального логарифма в NumPy
  4. Экспорт данных с помощью writefile
  5. Основы слова
  6. Приближение чисел в Python
  7. Потоковый ввод в Python
  8. Вычисление разности множеств в Python
  9. Удаление элемента из списка в Python
  10. Логические значения в Python
  11. Множественные конструкторы в Python
  12. Генераторы данных
  13. Разделение строки с регулярными выражениями
  14. Получение значений из словарей
  15. Компиляция регулярных выражений
  16. Преобразование строки в число
  17. Получение ID текущего процесса
  18. Генераторы данных
  19. Перевод эмодзи и эмотиконов.
  20. Применение функций в Python
  21. Поиск подстроки в строке
  22. Возврат нескольких значений
  23. Автоматизация с Python
  24. Игра «Виселица» на Python
  25. Отладка утечек памяти в Python
  26. Именование столбцов в Python с pandas
  27. Поиск наиболее частого элемента в списке
  28. Python Метод sleep() времени
  29. Метод get() в Python
  30. Ключевое слово global в Python
  31. Оператор assert в Python
  32. Работа с буфером обмена на Python
  33. PUT запрос для обновления данных
  34. Профилирование с Pandas
  35. Удаление файлов в Python
  36. Условные выражения в Python
  37. Разделение функций на этапы
  38. Получение размера объекта с sys.getsizeof()
  39. Применение промокода в Много лосося
  40. Операции с датами в Python
  41. Атрибуты класса и экземпляра
  42. Переворот строки с использованием цикла
  43. Эффективная конкатенация строк с использованием join()
  44. Функции range() в Python
  45. Переименование файлов в Python
  46. Работа с изображениями Pillow
  47. Установка Home Assistant

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