Please see the code below:-
#!/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))
Can someone please explain how is *numbers and **keywords picking up the arguments?
A simple explaination is very much appreciayed
Thanks in advance
In your code
numbersis assigned the (1,2,3) tuple.keywordsis assigned a dictionary, containingvegetablesandfruits.One star (
*) defines positional arguments. This means that you can receive any number of arguments. You can treat the passed arguments as a tuple.Two stars (
**) define keywords arguments.The reference material is available here.
Examples
Python 2.x (before keyword-only arguments)
Python 3.x (with keyword-only arguments)
Although a seasoned programmer understands what happened in 2.x, it’s counter-intuitive (a positional argument gets bound to
foo=regardless of keyword arguments as long as there are enough positional arguments)Python 3.x introduces more intuitive keyword-only arguments with PEP-3102 (keyword arguments after varargs can only be bound by name)