Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
Освоение аргументов функций в Python
Узнайте, как проектировать функции, принимающие переменное число аргументов в Python — используя значения по умолчанию, именованные и произвольные параметры для более чистого и адаптивного кода.
Видео: аргументы функций Python — позиционные, именованные и по умолчанию
Аргументы
В теме пользовательских функций мы рассмотрели определение и вызов функций. Вызов, не соответствующий ожидаемой сигнатуре, вызывает ошибку. Например:
def greet(name, msg):
"""Эта функция приветствует человека с предоставленным сообщением."""
print("Hello", name + ", " + msg)
greet("Monica", "Good morning!")
Вывод
Hello Monica, Good morning!
Функция greet() принимает два параметра. Вызов с правильным количеством аргументов проходит гладко; в противном случае интерпретатор выдает TypeError с понятным сообщением.
>> greet("Monica") # только один аргумент
TypeError: greet() missing 1 required positional argument: 'msg'
>> greet() # без аргументов TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'
Аргументы переменной длины
Python предлагает гибкие способы принятия переменного числа аргументов. Ниже рассмотрены три распространенных паттерна.
Аргументы по умолчанию в Python
Параметрам можно задавать значения по умолчанию с помощью оператора присваивания (=). Следующий пример демонстрирует, как опциональное сообщение по умолчанию устанавливается в «Good morning!»:
def greet(name, msg="Good morning!"):
"""
Эта функция приветствует человека с предоставленным сообщением.
Если сообщение не предоставлено, оно по умолчанию равно "Good morning!".
"""
print("Hello", name + ", " + msg)
greet("Kate")
greet("Bruce", "How do you do?")
Вывод
Hello Kate, Good morning! Hello Bruce, How do you do?
В этом определении name обязателен, а msg — опционален. Когда присутствует аргумент по умолчанию, все последующие параметры также должны иметь значения по умолчанию; иначе возникнет SyntaxError.
def greet(msg = "Good morning!", name): pass
SyntaxError: non-default argument follows default argument
Именованные аргументы в Python
Python позволяет вызывающим указывать аргументы по имени, обеспечивая гибкость позиционного порядка. Тую же функцию greet() можно вызвать следующим образом:
# 2 именованных аргумента
greet(name="Bruce", msg="How do you do?")
# 2 именованных аргумента (в другом порядке)
greet(msg="How do you do?", name="Bruce")
# 1 позиционный, 1 именованный аргумент
greet("Bruce", msg="How do you do?")
Смешивание позиционных и именованных аргументов допустимо только тогда, когда все позиционные аргументы предшествуют именованным; в противном случае возникнет SyntaxError.
greet(name="Bruce", "How do you do?")
SyntaxError: non-keyword arg after keyword arg
Произвольные аргументы в Python
Когда число аргументов неизвестно на этапе проектирования, используйте звездочку (*) для их сбора в кортеж:
def greet(*names):
"""Приветствует каждое имя в переданном кортеже."""
for name in names:
print("Hello", name)
greet("Monica", "Luke", "Steve", "John")
Вывод
Hello Monica Hello Luke Hello Steve Hello John
Внутри функции names — это кортеж, содержащий все переданные аргументы, который затем можно перебирать или обрабатывать по необходимости.
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Lambda-функции в Python: практическое руководство по анонимным функциям
- Словари в Python: создание, манипуляции и продвинутые техники
- Генераторы в Python: эффективная итерация и продвинутые сценарии
- Замыкания в Python: как вложенные функции захватывают переменные
- Декораторы в Python: улучшайте функции экспертными техниками
- Мастерство метода strip() в Python: подробное руководство и практические примеры
- Освоение лямбда-функций Python: практические примеры и лучшие практики