# *args and **kwargs — Python

Source: https://www.geekswithgeeks.com/en/python/py-args-kwargs

> Accept any number of positional or keyword arguments.

## Variable arguments

`*args` collects extra positional arguments into a tuple; `**kwargs` collects extra keyword arguments into a dict.

```python
def total(*args, **kwargs):
    print(args)      # (1, 2, 3)
    print(kwargs)    # {'tax': 0.1}
    return sum(args) * (1 + kwargs.get("tax", 0))

print(total(1, 2, 3, tax=0.1))
```

## Unpacking on call

The `*` and `**` also **unpack** on the call side: `total(*my_list, **my_dict)` spreads them out.
