*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.


Мітки: