Курс 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. Поиск простых чисел
  3. Переопределение метода __and__
  4. Сериализация данных в JSON с помощью json.dumps
  5. Реверс строки в Python
  6. Установка и использование pyshorteners
  7. Управление браузером с Selenium
  8. Метод join() для объединения элементов в строку.
  9. Генерация случайных чисел Python
  10. Форматирование данных с помощью pprint
  11. Функции с дополнением
  12. Метод clear для коллекций
  13. None в Python: использование и особенности
  14. Итерации в Python
  15. Декораторы в Python
  16. Каналы Senior: Python, Java, Frontend, SQL, C++
  17. Оператор Walrus в Python 3.8
  18. Генераторы в Python
  19. Извлечение новостей с newspaper3k
  20. GitHub в Telegram: подписка на уведомления
  21. Принципы SRP и OCP
  22. Установка Git и AWS CLI
  23. Метод rename() для переименования файлов и каталогов
  24. Сохранение и загрузка модели в PyTorch
  25. Функция __init__ в Python
  26. Работа с итераторами в Python
  27. Генераторы в Python
  28. Синхронизация потоков с time.sleep()
  29. Использование super() в Python
  30. Обработка исключений в Python
  31. Python: цикл for и оператор присваивания
  32. Defaultdict в Python
  33. Применение функции к элементам списка
  34. Установка и использование Python-dateutil
  35. Частичное совпадение пользовательского ввода в Python 3.10
  36. Генерация UUID в Python
  37. Необязательные аргументы в Python
  38. Метод getitem для доступа к элементам последовательности
  39. Переопределение оператора % для объектов
  40. Глобальные переменные в Python
  41. Управление User-Agent в Python
  42. Многопоточность и асинхронное программирование в Python
  43. Оператор «not» в Python
  44. Декораторы в Python

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