Search code examples
pythonfunction-parameterargument-unpacking

Difference call function with asterisk parameter and without


I know what the meaning of an asterisk is in a function definition in Python.

I often, though, see asterisks for calls to functions with parameters like:

def foo(*args, **kwargs):
    first_func(args, kwargs)
    second_func(*args, **kwargs)

What is the difference between the first and the second function call?


Solution

  • Let args = [1,2,3]:

    func(*args) == func(1,2,3) - variables are unpacked out of list (or any other sequence type) as parameters

    func(args) == func([1,2,3]) - the list is passed

    Let kwargs = dict(a=1,b=2,c=3):

    func(kwargs) == func({'a':1, 'b':2, 'c':3}) - the dict is passed

    func(*kwargs) == func(('a','b','c')) - tuple of the dict's keys (in random order)

    func(**kwargs) == func(a=1,b=2,c=3) - (key, value) are unpacked out of the dict (or any other mapping type) as named parameters