9.1 Параметры vs аргументы
У новичков часто возникает путаница между терминами «параметры» и «аргументы», но их различие важно для понимания функционального программирования.
Параметры — это переменные, которые перечислены в определении функции. Они представляют собой имена, которые функция использует для ссылки на передаваемые ей значения. Параметры функции служат как «заполнители» для значений, которые будут использованы в теле функции. Когда вы определяете функцию, вы описываете её параметры.
def print_info(name, age): # name и age — это параметры
print(f"Name: {name}, Age: {age}")
Аргументы — это конкретные значения или данные, передаваемые функции при её вызове. Аргументы подставляются в места параметров при выполнении функции. Аргументы могут быть константами, переменными, выражениями или даже результатами других функций.
print_info("Alice", 30) # "Alice" и 30 — это аргументы
Виды аргументов
- Позиционные аргументы: значения передаются в порядке, в котором параметры определены.
- Ключевые аргументы: аргументы, передаваемые функции с использованием имени параметра, что позволяет им быть перечисленными в любом порядке после позиционных аргументов.
- Аргументы по умолчанию: при определении функции параметрам можно присвоить значения по умолчанию.
Позиционные аргументы вы уже используете, а ключевые аргументы и аргументы по умолчанию мы рассмотрим в следующих лекциях.
Различие между параметрами и аргументами в Python помогает понять, как функции получают и обрабатывают данные. Это различие важно для создания гибких функций, которые можно легко адаптировать к различным условиям вызова, делая ваш код более модульным и повторно используемым.
9.2 Значения по умолчанию
Аргументы по умолчанию в Python — это механизм, позволяющий функциям заранее указать предопределённые значения для одного или нескольких параметров. Эта возможность делает вызов функции более удобным и гибким, поскольку не требует явного указания всех аргументов каждый раз при вызове функции.
Определение аргументов по умолчанию
Аргументы по умолчанию задаются в определении функции, где при объявлении параметра указывается значение, которое будет использоваться, если при вызове функции аргумент не будет передан:
def print_info(name, company='Unknown'):
print(f"Name: {name}, Company: {company}")
В этом примере company имеет значение по умолчанию 'Unknown'.
- Упрощение вызова функций: Функции с множеством параметров могут быть вызваны с указанием только наиболее важных аргументов.
- Гибкость: Функции можно адаптировать к различным сценариям использования без изменения их кода.
- Читаемость кода: Явное указание значений по умолчанию делает код самодокументируемым.
Важные нюансы
Неизменяемость: Значения по умолчанию для аргументов должны быть неизменяемыми типами данных, такими как числа, строки или кортежи. Использование изменяемых типов (например, списков или словарей) может привести к нежелательным побочным эффектам из-за того, что изменения в этих объектах сохраняются между вызовами функции.
Порядок аргументов: Параметры с аргументами по умолчанию должны следовать после параметров без аргументов по умолчанию в определении функции.
Еще пример:
def create_user(username, is_admin=False):
if is_admin:
print(f"User {username} is an admin.")
else:
print(f"User {username} is a regular user.")
create_user("Alice") # is_admin == False
create_user("Bob", is_admin=True) # is_admin == True
create_user("Karl", True) # is_admin == True
Выше приведены 3 способа вызова функции с аргументом по умолчанию: каждый из них рабочий.
9.3 Передача параметров по имени
Передача параметров в функцию по имени позволяет более ясно указать, какие значения передаются каким аргументам, улучшая читаемость кода и уменьшая вероятность ошибок, связанных с неправильным порядком аргументов.
Чтобы передать значение параметра по имени, нужно при вызове функции присвоить значение определенному параметру:
функция(параметр1 = значение, параметр2 = значение)
Этот способ особенно полезен при работе с функциями, имеющими множество параметров или параметры со значениями по умолчанию.
Преимущества передачи параметров по имени
- Ясность и читаемость: Указание имени параметра при его вызове делает код легче понятнее для других разработчиков или при возвращении к собственному старому коду.
- Гибкость: Параметры могут быть переданы в любом порядке, что удобно, когда функция имеет много параметров.
- Избежание ошибок: Нет необходимости помнить порядок параметров функции, что уменьшает вероятность ошибок, связанных с неправильной передачей значений.
Примеры использования
def create_profile(name, age, job):
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Job: {job}")
create_profile(age = 28, name = "John", job = "Developer")
В этом примере параметры передаются не по порядку, но каждому из них явно присваивается значение, что делает вызов функции более гибким и понятным.
Пример 2:
Кстати, вы уже сталкивались раньше с передачей параметров по имени. В функции print(), помните?
print(1, 2, 3, 4, 5, sep="-", end="!!")
Да, это именно тот случай 😊.
Особенности и ограничения
Параметры, передаваемые по имени, должны следовать после параметров без имени, если таковые есть в определении функции.
Нельзя использовать одно и то же имя параметра более одного раза при вызове функции.
Передача параметров по имени — это мощная возможность Python, которая делает код более безопасным и понятным, особенно в случаях использования функций с множеством аргументов или опциональными значениями.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ