Объяснение к уроку
После этого урока ты сможешь:
Аргумент по умолчанию присваивает параметру значение, если вызывающий код опускает этот аргумент при вызове:
def format_status(service, status="unknown"):
return f"{service}: {status}"Вызов format_status("worker") использует "unknown", тогда как format_status("worker", "healthy") переопределяет его.
Параметры без значений по умолчанию обязаны располагаться перед параметрами со значениями по умолчанию:
def create_job(name, retries=3):
...Python также позволяет передавать аргументы по имени:
create_job(name="backup", retries=5)Именованные аргументы делают вызовы нагляднее, когда несколько значений имеют похожие типы или когда нужно переопределить только одну необязательную настройку. Их порядок может отличаться от порядка параметров в функции, если каждое имя корректно и ни один аргумент не передан дважды.
Тесты функций проверяют поведение значений по умолчанию, вызывая функцию с меньшим числом аргументов. Тестовая среда запускает функции позиционно, поэтому в этом уроке синтаксис вызова по имени отрабатывается на целевых практических задачах, а поведение функций тестируется в реальных сценариях.
Более сложные темы, такие как *args, **kwargs, параметры только по ключевым словам и опасности изменяемых значений по умолчанию, рассматриваются в разделе углублённого изучения функций.
def cache_label(service, ttl=300):
return f"{service}: {ttl}s"
print(cache_label("api"))Вывод:
api: 300sВызывающий код передаёт только обязательный аргумент.
def retry_label(job, retries=3):
return f"{job}: {retries} retries"
print(retry_label("sync", 5))Вывод:
sync: 5 retriesВторой аргумент заменяет значение по умолчанию.
def build_window(name, width=800, height=600):
return f"{name}: {width}x{height}"
print(build_window(name="Dashboard", height=720, width=1280))Вывод:
Dashboard: 1280x720Именованные аргументы можно передавать в другом порядке.
def create_alert(message, level="info", channel="console"):
return f"[{level}] {channel}: {message}"
print(create_alert("Queue delayed", channel="slack"))Вывод:
[info] slack: Queue delayedПереопределяется только канал; уровень сохраняет своё значение по умолчанию.
| Задача | Python |
|---|---|
| Определить необязательный параметр | parameter=value |
| Использовать значение по умолчанию | Опустить этот аргумент при вызове |
| Переопределить значение по умолчанию | Передать другое значение |
| Сделать вызов самодокументируемым | parameter=value при вызове |
| Сохранить корректную сигнатуру | Обязательные параметры перед параметрами по умолчанию |