Практические примеры использования *args и **kwargs
Функция с переменным числом аргументов для арифметических операций
Создадим функцию, которая может выполнять различные арифметические операции над любым количеством аргументов.
def arithmetic_operations(*args, operator='+'):
result = args[0]
for i in range(1, len(args)):
if operator == '+':
result += args[i]
elif operator == '-':
result -= args[i]
elif operator == '*':
result *= args[i]
elif operator == '/':
result /= args[i]
return result
print(arithmetic_operations(1, 2, 3, 4, operator='+')) ## Output: 10
print(arithmetic_operations(10, 3, 2, operator='-')) ## Output: 5
print(arithmetic_operations(2, 3, 4, operator='*')) ## Output: 24
print(arithmetic_operations(20, 4, operator='/')) ## Output: 5.0
В этом примере функция arithmetic_operations()
может принимать любое количество аргументов с помощью *args
, а желаемая арифметическая операция задается с помощью именованного аргумента operator
.
Сбор пользовательского ввода с использованием *args
Предположим, что вы хотите создать функцию, которая собирает произвольное количество пользовательских вводов и сохраняет их в списке.
def collect_inputs(*args):
user_inputs = []
for arg in args:
user_input = input(f"Enter {arg}: ")
user_inputs.append(user_input)
return user_inputs
names = collect_inputs("name", "age", "city")
print(names)
## Output:
## Enter name: LabEx
## Enter age: 30
## Enter city: New York
## ['LabEx', '30', 'New York']
В этом примере функция collect_inputs()
использует *args
для приема произвольного количества подсказок, а затем собирает ответы пользователя и сохраняет их в списке.
Функция логирования с использованием **kwargs
Представьте, что вы хотите создать функцию логирования, которая может логировать сообщения с разными уровнями (например, debug, info, warning, error) и включать дополнительные метаданные.
def log_message(**kwargs):
log_level = kwargs.get('level', 'info')
message = kwargs['message']
metadata = kwargs.get('metadata', {})
print(f"[{log_level.upper()}] {message}")
for key, value in metadata.items():
print(f" {key}: {value}")
log_message(level='debug', message='This is a debug message')
## Output:
## [DEBUG] This is a debug message
log_message(level='warning', message='Something unusual happened', metadata={'user': 'LabEx', 'timestamp': '2023-04-18 12:34:56'})
## Output:
## [WARNING] Something unusual happened
## user: LabEx
## timestamp: 2023-04-18 12:34:56
В этом примере функция log_message()
использует **kwargs
для приема произвольного количества именованных аргументов, включая уровень логирования, сообщение и необязательные метаданные.