Python - Аргументы по умолчанию

Привет, молодые Python-программисты! Сегодня мы погружаемся в увлекательный мир аргументов по умолчанию в Python. В качестве вашего доброго соседа по улице, преподавателя компьютерных наук, я рад вести вас по этому пути. Так что взять свой любимый напиток, удобно расположиться и давайте отправимся в это приключение с Python вместе!

Python - Default Arguments

Что такое аргументы по умолчанию?

Перед тем как погружаться в детали, начнем с основ. Аргументы по умолчанию — это удобная функция в Python, которая позволяет определять параметры функции с предустановленными значениями. Эти значения будут использоваться, если вы не предоставите конкретное значение при вызове функции.

Представьте аргументы по умолчанию как сетку безопасности. Они пригодятся, если вы забудете указать значение, обеспечивая беспроблемное выполнение функции. Это как иметь друга, который всегда приносит дополнительные закуски на пикник — вы можете не всегда нуждаться в них, но приятно знать, что их можно использовать в случае необходимости!

Почему использовать аргументы по умолчанию?

  1. Они делают ваш код более гибким.
  2. Они сокращают количество аргументов, которые вам нужно предоставлять.
  3. Они помогают поддерживать обратную совместимость при добавлении новых параметров в функции.

Теперь давайте увидим, как это работает на практике!

Пример аргументов по умолчанию

Начнем с простого примера. Представьте, что мы создаем функцию для приветствия людей:

def приветствие(имя, приветствие="Привет"):
return f"{приветствие}, {имя}!"

# Использование функции
print(приветствие("Алиса"))
print(приветствие("Боб", "Приветик"))

Вывод:

Привет, Алиса!
Приветик, Боб!

В этом примере приветствие — наш аргумент по умолчанию. Если мы не указываем приветствие, функция будет использовать "Привет" по умолчанию. Разберем это:

  1. Мы определили функцию приветствие с двумя параметрами: имя и приветствие.
  2. приветствие имеет значение по умолчанию "Привет".
  3. Когда мы вызываем приветствие("Алиса"), мы предоставляем только имя. Функция использует значение по умолчанию "Привет" для приветствия.
  4. Когда мы вызываем приветствие("Боб", "Приветик"), мы предоставляем как имя, так и приветствие, поэтому функция использует "Приветик" вместо значения по умолчанию.

Пример: Вызов функции без именованных аргументов

Теперь рассмотрим немного более сложный пример. Создадим функцию для расчета общей стоимости товаров в корзине покупателя:

def расчет_итога(товары, налог=0.08, скидка=0):
итог без_налога = sum(товары)
итог = итог без_налога * (1 + налог) - скидка
return round(итог, 2)

# Использование функции
корзина1 = [10, 20, 30]
print(расчет_итога(корзина1))
print(расчет_итога(корзина1, 0.10))
print(расчет_итога(корзина1, 0.10, 5))

Вывод:

64.80
66.00
61.00

Разберем это:

  1. Наша функция расчет_итога имеет три параметра: товары (обязательно), налог (по умолчанию 0.08), и скидка (по умолчанию 0).
  2. В первом вызове мы предоставляем только товары. Функция использует значение налога по умолчанию и нет скидки.
  3. Во втором вызове мы предоставляем товары и пользовательский налог 0.10. Скидка остается 0.
  4. В третьем вызове мы предоставляем все три аргумента: товары, налог и скидка 5.

Помните, при вызове функции без именованных аргументов, порядок имеет значение! Python назначает значения параметрам в том порядке, в котором они предоставлены.

Мutable объекты в качестве аргументов по умолчанию

Теперь приходит сложный момент. Использование изменяемых объектов (например, списков или словарей) в качестве аргументов по умолчанию может привести к неожиданному поведению. Давайте посмотрим, что я имею в виду:

def добавить_товар(товар, список_покупок=[]):
список_покупок.append(товар)
return список_покупок

print(добавить_товар("яблоко"))
print(добавить_товар("банан"))
print(добавить_товар("черника"))

Вывод:

['яблоко']
['яблоко', 'банан']
['яблоко', 'банан', 'черника']

Сюрприз! Список продолжает расти с каждым вызовом. Это происходит потому, что список по умолчанию создается только один раз при определении функции, а не при каждом вызове.

Чтобы избежать этого, мы можем использовать None в качестве значения по умолчанию и создать новый список внутри функции:

def добавить_товар(товар, список_покупок=None):
if список_покупок is None:
список_покупок = []
список_покупок.append(товар)
return список_покупок

print(добавить_товар("яблоко"))
print(добавить_товар("банан"))
print(добавить_товар("черника"))

Вывод:

['яблоко']
['банан']
['черника']

Гораздо лучше! Теперь каждый вызов создает новый список, как ожидалось.

Резюме Python Default Arguments

Подведем итоги, что мы узнали, в удобной таблице:

Понятие Описание Пример
Основной аргумент по умолчанию Предоставляет значение по умолчанию для параметра def приветствие(имя, приветствие="Привет"):
Мultiple Default Arguments Функция может иметь несколько аргументов по умолчанию def расчет_итога(товары, налог=0.08, скидка=0):
Порядок аргументов Необязательные аргументы должны идти перед аргументами по умолчанию в определении функции def функция(требуется, опционально=по_умолчанию):
Mutable Default Arguments Избегайте использования изменяемых объектов в качестве аргументов по умолчанию Используйте None по умолчанию и создайте объект внутри функции
Именованные аргументы Позволяют вызывать функции с именованными аргументами в любом порядке расчет_итога(товары=[10, 20], скидка=5)

Итак, это было! Вы только что повысили свою компетентность в Python с помощью аргументов по умолчанию. Помните, как и любое мощное инструмент, используйте их мудро. Они могут сделать ваш код более гибким и легким в использовании, но будьте осторожны с теми изменяемыми по умолчанию!

Успехов в тренировках, оставайтесь любознательными и счастливого кодирования! Когда вы поймете, вы уже пишете Python как профессионал. До встречи в следующий раз, это ваш добрый сосед по улице, преподаватель КС, подписывается!

Credits: Image by storyset