The * operator unpack the arguments out of a list or tuple.
> args = [3, 6] > list(range(*args)) [3, 4, 5]
As an example, when we have a list of three arguments, we can use the * operator inside a function call to unpack it into the three arguments:
def f(a,b,c): print('a={},b={},c={}'.format(a,b,c)) > z = ['I','like','Python'] > f(*z) a=I,b=like,c=Python > z = [['I','really'],'like','Python'] > f(*z) a=['I', 'really'],b=like,c=Python
In Python 3 it is possible to use the operator * on the left side of an assignment, allowing to specify a “catch-all” name which will be assigned a list of all items not assigned to a “regular” name:
> a, *b, c = range(5) > a 0 > c 4 > b [1, 2, 3]
The ** operator can be used to unpack a dictionary of arguments as a collection of keyword arguments. Calling the same function f that we defined above:
> d = {'c':'Python','b':'like', 'a':'I'} > f(**d) a=I,b=like,c=Python
and when there is a missing argument in the dictionary (‘a’ in this example), the following error message will be printed:
> d2 = {'c':'Python','b':'like'} > f(**d2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() missing 1 required positional argument: 'a'
Tried with: Python 3.6.5