Курс 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. Numpy: объединение массивов
  3. Python enumerate() функции
  4. Курс Data Scientist в медицине
  5. Метод clear для коллекций
  6. Установка Git и AWS CLI
  7. Сортировка слиянием
  8. Аннотации типов в Python
  9. Получение локальных переменных в Python
  10. Создание уникального множества
  11. Переворот последовательности
  12. Определение имен функций
  13. Стать Python-разработчиком
  14. Создание Telegram-бота на Python
  15. Особенности запятых в Python
  16. Оператор is в Python
  17. Создание генераторов
  18. Функция count() в Python
  19. Определение размера папок в Python
  20. Настройка шрифта и цвета в Tkinter
  21. Принципы Zen of Python
  22. Установка максимального количества цифр
  23. Дизассемблирование Python кода
  24. Асинхронное выполнение задач в Python
  25. Добавление вложенных списков
  26. Генератор чисел Фибоначчи
  27. Инициализация переменных
  28. PrettyTable: создание таблицы
  29. Декоратор для группы пользователей в Django
  30. Метод init в Python
  31. Оператор обр. импликации
  32. Решатель судоку на Python с pygame
  33. Тестирование функции сложения
  34. Настройка логгера Logzero
  35. Dict Comprehension в Python
  36. Сортировка в Python
  37. Функция enumerate в Python
  38. Участие в LP стейкинге Waves
  39. Преобразование регистра строк
  40. Преобразование строк в числа с плавающей запятой
  41. Работа с контекстными менеджерами
  42. Python: Splat-оператор и splatty-splat
  43. Оптимизация памяти в Python
  44. Библиотека wikipedia для Python
  45. Список переменных с %who
  46. Преобразование списка в словарь через генератор
  47. Поиск уникальных и повторяющихся элементов
  48. Капитализация строк
  49. Особенности ключей словаря в Python

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