*args та **kwargs використовуються в якості параметрів при оголошенні функції, для забезпечення можливості передавати їй перемінну кількість аргументів під час виклику. Значення мають саме символи * та **. Імена args та kwargs це узгодження про найменування у мові python, якщо цим параметрам дати інше ім’я, програма буде працювати так само.
*args
Символ * перед ім’ям параметру функції (наприклад *args) використовується у випадках, коли попередньо невідома кількість не пойменованих аргументів, котра знадобиться функції під час виклику. Приклад:
def print_count(*args):
print(f'Type *args: {type(args)}')
count = 0
for i in args:
count += i
print(f'Count: {count}')
if __name__ == '__main__':
print_count(1, 2, 3)
print_count(1, 2, 3, 4)Вивід:
Type *args: <class 'tuple'>
Count: 6
Type *args: <class 'tuple'>
Count: 10Важливо уточнити, що аргументи *args на виході збираються у python tuple.
**kwargs
Символ ** перед ім’ям параметру функції (наприклад **kwargs) використовується у випадках, коли попередньо невідома кількість пойменованих аргументів, котра знадобиться функції під час виклику. Приклад:
def pring_data(**kwargs):
print(f'Type **kwargs: {type(kwargs)}')
for key, value in kwargs.items():
print(f'{key}={value}')
print('.' * 15)
if __name__ == '__main__':
pring_data(first_name='Kirsten', last_name='Vasquez')
pring_data(first_name='Madeleine', last_name='Petersen', age=33)Вивід:
Type **kwargs: <class 'dict'>
first_name=Kirsten
last_name=Vasquez
...............
Type **kwargs: <class 'dict'>
first_name=Madeleine
last_name=Petersen
age=33
...............Важливо уточнити, що аргументи **kwargs на виході збираються у python dict.