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?
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