Передача произвольного набора аргументов

We use cookies. Read the Privacy and Cookie Policy

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

Для примера рассмотрим функцию для создания пиццы. Функция должна получить набор дополнений к пицце, но вы не знаете заранее, сколько дополнений закажет клиент. Функция в следующем примере получает один параметр *toppings, но этот параметр объединяет все аргументы, заданные в командной строке:

pizza.py

def make_pizza(*toppings):

. ."""Вывод списка заказанных дополнений."""

. .print(toppings)

. . . .

make_pizza('pepperoni')

make_pizza('mushrooms', 'green peppers', 'extra cheese')

Звездочка в имени параметра *toppings приказывает Python создать пустой кортеж с именем toppings и упаковать в него все полученные значения. Результат команды print в теле функции показывает, что Python успешно справляется и с вызовом функции с одним значением, и с вызовом с тремя значениями. Разные вызовы обрабатываются похожим образом. Обратите внимание: Python упаковывает аргументы в кортеж даже в том случае, если функция получает всего одно значение:

('pepperoni',)

('mushrooms', 'green peppers', 'extra cheese')

Теперь команду print можно заменить циклом, который перебирает список ­дополнений и выводит описание заказанной пиццы:

def make_pizza(*toppings):

. ."""Выводит описание пиццы."""

. .print(" Making a pizza with the following toppings:")

. .for topping in toppings:

. . . .print("- " + topping)

. . . .

make_pizza('pepperoni')

make_pizza('mushrooms', 'green peppers', 'extra cheese')

Функция реагирует соответственно независимо от того, сколько значений она получила — одно или три:

Making a pizza with the following toppings:

- pepperoni

Making a pizza with the following toppings:

- mushrooms

- green peppers

- extra cheese

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