Аргументы и ключевые аргументы в Python 3
В Python 3 есть два специальных параметра - *args и **kwargs, которые позволяют передавать переменное количество аргументов в функции. Эти параметры особенно полезны, когда вы не знаете заранее, сколько аргументов будет передано в функцию или если у вас есть необязательные аргументы, которые могут отсутствовать в вызове функции. Давайте рассмотрим каждый из них более подробно и рассмотрим примеры кода.
*args:
Параметр *args позволяет передавать произвольное количество позиционных аргументов в функцию. Для объявления *args в определении функции используется звездочка перед именем параметра. Когда функция вызывается, все переданные аргументы будут собраны в кортеж.
Пример кода:
def sum_numbers(*args):
result = 0
for num in args:
result += num
return result
print(sum_numbers(1, 2, 3)) # Вывод: 6
print(sum_numbers(10, 20, 30, 40)) # Вывод: 100
В этом примере мы определили функцию sum_numbers, принимающую переменное количество аргументов через *args. Затем мы прошлись по каждому аргументу в цикле и сложили их значения. В результате мы получаем сумму всех чисел, переданных в функцию.
**kwargs:
Параметр **kwargs позволяет передавать произвольное количество именованных аргументов в функцию. В определении функции **kwargs представлен в виде двух звездочек перед именем параметра. При вызове функции именованные аргументы передаются в виде пар ключ-значение, которые будут собраны в словарь.
Пример кода:
def print_person_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_person_info(name="John", age=30, city="New York")
# Вывод:
# name: John
# age: 30
# city: New York
В этом примере мы определили функцию print_person_info, принимающую произвольное количество именованных аргументов через **kwargs. Затем мы прошлись по каждому элементу словаря и вывели его ключ и значение.
Комбинирование *args и **kwargs:
Вы также можете использовать и *args, и **kwargs в одной функции, чтобы иметь возможность передавать и позиционные, и именованные аргументы.
Пример кода:
def print_info(*args, **kwargs):
for arg in args:
print(arg)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(1, 2, 3, name="John", age=30)
# Вывод:
# 1
# 2
# 3
# name: John
# age: 30
В данном примере функция print_info может принимать и позиционные аргументы через *args, и именованные аргументы через **kwargs. Мы вывели все позиционные аргументы и затем вывели все элементы словаря.
В заключение, использование *args и **kwargs в Python 3 предоставляет гибкость в передаче аргументов в функции. *args позволяет передавать произвольное количество позиционных аргументов, а **kwargs - произвольное количество именованных аргументов. Вы также можете комбинировать оба параметра в одной функции, чтобы обеспечить максимальную гибкость входных данных.