Позиционные аргументы с произвольными наборами аргументами в функциях Python
Ранее мы уже рассматривали передачу произвольного значения аргументов функции, но как быть, если нужно передать позиционный аргумент и произвольный набор вместе?
Если необходимо, чтобы функция могла вызываться с произвольным набором аргументов, параметр для получения произвольного количества аргументов должен стоять на последнем месте в определении функции. Так как Python сначала подбирает соответствия для позиционных и именованных аргументов, а потом объединяет все остальные в последнем параметре.
Рассмотрим пример с добавлением дополнительных цветов в заказ пользователя, но с небольшой доработкой.
Теперь мы сначала узнаём нужен ли градиент пользователю, а потом он может добавить произвольное количество цветов.
В определении функции user_color(), Python сохраняет первое значение в параметре gradient. Все остальные значения, следующие за ним, сохраняются в кортеж colors.
При вызове функции user_color() на первом месте располагается аргументы для параметра gradient, а затем следует сколь угодно дополнений.
# Определяем функцию def user_color(gradient, *colors): # Выводим значение параметра gradient print("Использование градиента:") print("- " + gradient) print("\nЦвета, которые добавил пользователь:") # Запускаем цикл for for color in colors: print("- " + color) # Вызываем функцию user_color("Да", "Красный", "Синий", "Зелёный")