Позиционные, именованные аргументы и аргументы по умолчанию
Тема дорожной карты · Python Programming
Python поддерживает позиционные, именованные и аргументы по умолчанию, а также маркеры positional-only (/) и keyword-only (*) для точных API. Значения по умолчанию сокращают вызовы, но классическая ошибка — изменяемые умолчания вроде def f(items=[]): список один на все вызовы. Используй None как маркер и создавай значение внутри функции. Для булевых и «опциональных» параметров предпочитай keyword-only аргументы — места вызова станут читаемее; позиционные оставляй для очевидных основных входов.
Как это работает
Позиционные, именованные аргументы и аргументы по умолчанию использует def name(params): body для объявления функций. Параметры могут быть позиционными, keyword, default-значимыми, variadic (*args, **kwargs) или positional-/keyword-only (PEP 570/3102). return возвращает значение (или None неявно). Функции — first-class объекты: их можно присваивать переменным, передавать как аргументы, возвращать из других функций. lambda — анонимная форма-выражение, полезна в sorted(key=...), map, filter. Скоупинг по LEGB (Local, Enclosing, Global, Built-in).
Когда применять
Выносите функцию когда (а) код повторяется, (б) ему можно дать осмысленное имя, (в) хотите тестировать его изолированно. Предпочитайте чистые функции (без сайд-эффектов, детерминированные) где возможно — они лучше композируются и легче тестируются. *args, **kwargs используйте с осторожностью; явные параметры документируют намерение. lambda хороша как маленький inline-коллбэк; для чего-то большего — def с именем.
Типичные ошибки
Ловушки Позиционные, именованные аргументы и аргументы по умолчанию: изменяемые значения по умолчанию (def f(x=[]): — список общий между вызовами; используйте x=None и инициализируйте внутри); затенение встроенных имён локальными (list = [1,2] потом list(...) ломается); изменение глобального состояния вместо возврата значения (нетестируемо, неожиданно на расстоянии); глубоко вложенные замыкания, захватывающие переменные цикла по ссылке, не по значению. Сигнатуры — короткие и явные.
Связанные понятия
Полезные ресурсы
Проверить знания (1)
Загрузка вопросов…