 All Vskills Certification exams are ONLINE now. You may take from any where any time | Please use #TOGETHER for 20% discount

# Learning Resources

## VarArgs parameters

Sometimes you might want to define a function that can take any number of parameters, this can be achieved by using the stars:

```#!/usr/bin/python
# Filename: total.py

def total(initial=5, *numbers, **keywords):
count = initial
for number in numbers:
count += number
for key in keywords:
count += keywords[key]
return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))```

Output:

```   \$ python total.py
166
```

How It Works:

When we declare a starred parameter such as *param, then all the positional arguments from that point till the end are collected as a tuple called 'param'.

Similarly, when we declare a double-starred parameter such as **param, then all the keyword arguments from that point till the end are collected as a dictionary called 'param'.

## Keyword-only Parameters

If we want to specify certain keyword parameters to be available as keyword-only and not as positional arguments, they can be declared after a starred parameter:

```#!/usr/bin/python
# Filename: keyword_only.py

def total(initial=5, *numbers, extra_number):
count = initial
for number in numbers:
count += number
count += extra_number
print(count)

total(10, 1, 2, 3, extra_number=50)
total(10, 1, 2, 3)
# Raises error because we have not supplied a default argument value for 'extra_number'```

Output:

```   \$ python keyword_only.py
66
Traceback (most recent call last):
File "keyword_only.py", line 12, in
total(10, 1, 2, 3)
TypeError: total() needs keyword-only argument extra_number
```

How It Works:

Declaring parameters after a starred parameter results in keyword-only arguments. If these arguments are not supplied a default value, then calls to the function will raise an error if the keyword argument is not supplied, as seen above.

Notice the use of += which is a shortcut operator, so instead of saying x = x + y, you can say x += y.

If you want to have keyword-only arguments but have no need for a starred parameter, then simply use an empty star without using any name such as def total(initial=5, *, extra_number).