Курс 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. Преобразование вложенного списка
  2. Ограничение итераций в Python
  3. Преобразование списков в словарь
  4. split() без разделителя
  5. Pillow: работа с изображениями
  6. Combobox в Tkinter
  7. Модуль Antigravity в Python 3
  8. Частичное применение функций в Python
  9. Декоратор защиты анонимных пользователей
  10. Избегайте изменяемых аргументов
  11. Библиотека Chartify: руководство
  12. Декораторы в Python
  13. Метод Self в Python
  14. Отправка POST-запроса в REST API
  15. Управление контекстом выполнения кода
  16. Удаление ключа из словаря в Python
  17. Замеры производительности в Python
  18. Генерация фальшивых данных с Faker
  19. Расчет времени выполнения
  20. Повторение и перенос строки
  21. Получение значений из словарей
  22. Мониторинг работы программы Py-spy
  23. Работа с deque в Python
  24. Проверка ввода с помощью isdigit
  25. 9 уловок для чистого кода
  26. Обмен переменными в Jupyter
  27. Обратный список чисел
  28. Оптимизация гиперпараметров в Python
  29. Генераторы в Python
  30. Применение функции к каждому элементу списка
  31. Логирование в Python
  32. Функция divmod() в Python
  33. Динамическая типизация в Python
  34. Конкатенация строк с join() в Python
  35. Измерение времени выполнения с помощью time
  36. Лямбда-функции в Python
  37. Импорт модулей в Python 3.12
  38. Python Enumerate
  39. Beautiful Soup — извлечение данных из HTML
  40. Работа с файлами в Python
  41. Работа с типами данных в Python с помощью pydantic.
  42. Генерация UUID в Python
  43. Использование функции enumerate()
  44. Поиск подстроки в строке
  45. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  46. Принципы Zen Python
  47. Вывод букв строки в Python
  48. Оператор is в Python
  49. Работа с GitHub в Telegram

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