Позиционные аргументы с произвольными наборами аргументов
Если вы хотите, чтобы функция могла вызываться с разными количествами аргументов, параметр для получения произвольного количества аргументов должен стоять на последнем месте в определении функции. Python сначала подбирает соответствия для позиционных и именованных аргументов, а потом объединяет все остальные аргументы в последнем параметре.
Например, если функция должна получать размер пиццы, этот параметр должен стоять в списке до параметра *toppings:
def make_pizza(size, *toppings):
. ."""Выводит описание пиццы."""
. .print(" Making a " + str(size) +
. . . . "-inch pizza with the following toppings:")
. .for topping in toppings:
. . . .print("- " + topping)
. . . .
make_pizza(16, 'pepperoni')
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
В определении функции Python сохраняет первое полученное значение в параметре size. Все остальные значения, следующие за ним, сохраняются в кортеже toppings. В вызовах функций на первом месте располагается аргумент для параметра size, а за ним следует сколько угодно дополнений.
В итоге для каждой пиццы указывается размер и количество дополнений, и каждый фрагмент информации выводится в положенном месте: сначала размер, а потом дополнения:
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese