Python - Произвольные или переменные аргументы

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

Python - Arbitrary Arguments

Произвольные аргументы (*args)

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

В Python мы используем *args для обозначения произвольных аргументов. Звездочка (*) – это магический символ, а args – это просто конвенция (вы можете использовать любое имя, но args широко используется и признан).

Посмотрим на простой пример:

def привет_друзьям(*args):
for друг in args:
print(f"Привет, {друг}!")

привет_друзьям("Алиса", "Боб", "Чарли")

В этом примере привет_друзьям() может принимать любое количество аргументов. Когда мы выполним этот код, он выведет:

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

Но что, если у нас было больше друзей? Нет проблемы! Мы могли бы легко добавить больше имен:

привет_друзьям("Алиса", "Боб", "Чарли", "Давид", "Ева")

И наша функция с радостью поприветствовала бы всех!

Как работает *args

Когда вы используете *args в определении функции, Python упаковывает все аргументы в кортеж. Вы можете затем итерировать по этому кортежу внутри вашей функции. Это как магическая сумка, которая может содержать любое количество предметов!

Пример произвольных аргументов

Создадим более практичный пример. Предположим, что мы хотим вычислить среднее значение различного количества оценок:

def вычислить_среднее(*args):
if len(args) == 0:
return 0
общее = sum(args)
среднее = общее / len(args)
return среднее

print(вычислить_среднее(85, 90, 78))
print(вычислить_среднее(92, 88, 95, 78, 80))

Это выведет:

84.33333333333333
86.6

Наша функция вычислить_среднее() может обрабатывать любое количество оценок. Она вычисляет сумму с помощью встроенной функции sum(), затем делит на количество оценок, чтобы получить среднее значение.

Требуемые аргументы с произвольными аргументами

Иногда вы можете хотеть иметь некоторые требуемые аргументы вместе с произвольными аргументами. Не волнуйтесь! Python поддерживает это. Вы можете комбинировать обычные параметры с *args. Просто помните, что *args должен быть в конце:

def представить_класс(учитель, *студенты):
print(f"Привет, я {учитель}, и я ваш учитель.")
print("Представим студентов:")
for студент in студенты:
print(f"- {студент}")

представить_класс("Мистер Джонсон", "Алиса", "Боб", "Чарли")

Это выведет:

Привет, я Мистер Джонсон, и я ваш учитель.
Представим студентов:
- Алиса
- Боб
- Чарли

В этом примере учитель – это требуемый аргумент, а *студенты может принимать любое количество имен студентов.

Произвольные именованные аргументы (**kwargs)

А теперь поднимемся на новую ступень! Что если мы хотим передать пары ключ-значение в качестве аргументов? Введите **kwargs (именованные аргументы)! Это как *args, но для именованных аргументов.

Вот простой пример:

def печатать_информацию_о_пользователе(**kwargs):
for ключ, значение in kwargs.items():
print(f"{ключ}: {значение}")

печатать_информацию_о_пользователе(name="Алиса", age=25, city="Нью-Йорк")

Это выведет:

name: Алиса
age: 25
city: Нью-Йорк

В этом случае **kwargs создает словарь, где ключами являются имена аргументов, а значениями – значения аргументов.

Несколько аргументов с произвольными именованными аргументами

Вы можете комбинировать обычные аргументы, *args и **kwargs в одной функции. Просто помните порядок: сначала обычные аргументы, затем *args, и в конце **kwargs.

Вот пример, который объединяет все вместе:

def информация_о_студенте(школа, *args, **kwargs):
print(f"Школа: {школа}")
print("Предметы:")
for предмет in args:
print(f"- {предмет}")
print("Дополнительная информация:")
for ключ, значение in kwargs.items():
print(f"{ключ}: {значение}")

информация_о_студенте("Python High", "Математика", "Наука", "История", name="Алиса", age=16, класс="10")

Это выведет:

Школа: Python High
Предметы:
- Математика
- Наука
- История
Дополнительная информация:
name: Алиса
age: 16
класс: 10

Резюме методов

Вот таблица, подводящая итог методов, о которых мы обсуждали:

Метод Синтаксис Описание
Произвольные аргументы *args Позволяет функции принимать любое количество позиционных аргументов
Произвольные именованные аргументы **kwargs Позволяет функции принимать любое количество именованных аргументов
Комбинированное использование def func(обычные_args, *args, **kwargs) Комбинирует обычные аргументы с обоими типами произвольных аргументов

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

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

Credits: Image by storyset