*args & **kwargs in Python function
Buy Me a Coffee☕ *Memos: My post explains variable assignment in Python. My post explains iterable unpacking in Python variable assignment. My post explains * for iterable unpacking in Python variable assignment. My post explains * for iterable unpacking in Python function. My post explains ** for dictionary unpacking in Python. You can use *args and **kwargs in a function as shown below: *The memos for *arg: A *args can store zero or more values as a tuple. Only one *args can be used in a function. A *args cannot have a default value. *args can be other names such as *myargs and *myparam. *A * is an iterable unpacking operator. Zero or more *iterables can be used as the arguments passed to the zero or more parameters including a *args and **kwargs in a function. *The memos for **kwargs: A **kwargs can store zero or more values as a dictionary. Only one **kwargs can be used in a function. A **kwargs cannot have a default value. A **kwargs must be the last parameter. **kwargs can be other names such as **mykwargs and **myparam. *A ** is a dictionary unpacking operator. Zero or more **dictionaries can be used as the arguments passed to the zero or more parameters including a *args and **kwargs in a function. def func(*args, **kwargs): pass def func(p, *args, **kwargs): pass def func(p="p", *args, **kwargs): pass def func(*args, p, **kwargs): pass def func(*args, p="p", **kwargs): pass # No error def func(*args1, *args2, **kwargs): pass # SyntaxError: * argument may appear only once def func(*args, **kwargs1, **kwargs2): pass def func(**kwargs, *args): pass # SyntaxError: arguments cannot follow var-keyword argument def func(*args=["John"], **kwargs): pass def func(*args=*["John"], **kwargs): pass def func(*args, **kwargs={"name":"John"}): pass def func(*args, **kwargs=**{"name":"John"}): pass # SyntaxError: var-positional argument cannot have default value def func(*args, **kwargs): print(args, kwargs) print(*args, *kwargs) print(*kwargs.keys(), *kwargs.values(), *kwargs.items()) func() # () {} # Nothing Nothing # Nothing Nothing Nothing func(0, 1, 2) func(*[0, 1, 2]) func(*(0, 1, 2)) # (0, 1, 2) {} # 0 1 2 Nothing # Nothing Nothing Nothing func([0, 1, 2]) # ([0, 1, 2],) {} # [0, 1, 2] Nothing # Nothing Nothing Nothing func((0, 1, 2)) # ((0, 1, 2),) {} # (0, 1, 2) Nothing # Nothing Nothing Nothing func(fname="John", lname="Smith") func(**{"fname":"John", "lname":"Smith"}) func(**{"fname":"John"}, **{"lname":"Smith"}) func(fname="John", **{"lname":"Smith"}) func(**{"fname":"John"}, lname="Smith") # () {'fname': 'John', 'lname': 'Smith'} # Nothing fname lname # fname lname John Smith ('fname', 'John') ('lname', 'Smith') func(*{"fname":"John", "lname":"Smith"}) func(*{"fname":"John"}, *{"lname":"Smith"}) # ('fname', 'lname') {} # fname lname Nothing # Nothing Nothing Nothing func(fname="John", *{"lname":"Smith"}) # ('lname',) {'fname': 'John'} # lname fname # fname John ('fname', 'John') func(*{"fname":"John"}, lname="Smith") # ('fname',) {'lname': 'Smith'} # fname lname # lname Smith ('lname', 'Smith') func({"fname":"John", "lname":"Smith"}) func({"fname":"John"}, {"lname":"Smith"}) # ({'fname': 'John', 'lname': 'Smith'},) {} # {'fname': 'John', 'lname': 'Smith'} Nothing # Nothing Nothing Nothing func({"fname":"John"}, lname="Smith") # ({'fname': 'John'},) {'lname': 'Smith'} # {'fname': 'John'} lname # lname Smith ('lname', 'Smith') func(0, 1, 2, fname="John", lname="Smith") func(*[0, 1, 2], **{"fname":"John", "lname":"Smith"}) func(*(0, 1, 2), **{"fname":"John"}, **{"lname":"Smith"}) # (0, 1, 2) {'fname': 'John', 'lname': 'Smith'} # 0 1 2 fname lname # fname lname John Smith ('fname', 'John') ('lname', 'Smith') func([0, 1, 2], fname="John", **{"lname":"Smith"}) # ([0, 1, 2],) {'fname': 'John', 'lname': 'Smith'} # [0, 1, 2] fname lname # fname lname John Smith ('fname', 'John') ('lname', 'Smith') func((0, 1, 2), **{"fname":"John"}, lname="Smith") # ((0, 1, 2),) {'fname': 'John', 'lname': 'Smith'} # (0, 1, 2) fname lname # fname lname John Smith ('fname', 'John') ('lname', 'Smith') def func(p="p", *args, **kwargs): print(p, args, kwargs) print(p, *args, *kwargs) print(p,*kwargs.keys(), *kwargs.values(), *kwargs.items()) func() # p () {} # p Nothing Nothing # p Nothing Nothing Nothing func(0, 1, 2) func(*[0, 1, 2]) func(*(0, 1, 2)) # 0 (1, 2) {} Nothing # 0 1 2 Nothing # 0 Nothing Nothing Nothing func([0, 1, 2]) # [0, 1, 2] () {} # [0, 1, 2] Nothing Nothing # 0 Nothing Nothing Nothing func((0, 1, 2)) # (0, 1, 2) () {} # (0, 1, 2) Nothing Nothing # (0, 1, 2) Nothing Nothing Nothing func(fname="John", lname="Smith") func(**{"fname":"John", "lname":"Smith"}) func(**{"fname":"John"}, **{"lname":"Smith"}) func(fname="John", **{"lname":"Smith"}) func(**{"fname":"John"}, lname="Smith") # p () {'fname': 'John', 'lname': 'Smith'} # p Nothing fname lname # p fname lname John Smith ('fname', 'John') ('lname', 'Smith') func(*{"fname":"John"

*Memos:
- My post explains variable assignment in Python.
- My post explains iterable unpacking in Python variable assignment.
-
My post explains
*
for iterable unpacking in Python variable assignment. -
My post explains
*
for iterable unpacking in Python function. -
My post explains
**
for dictionary unpacking in Python.
You can use *args
and **kwargs
in a function as shown below:
*The memos for *arg
:
- A
*args
can store zero or more values as a tuple. - Only one
*args
can be used in a function. - A
*args
cannot have a default value. -
*args
can be other names such as*myargs
and*myparam
. *A*
is an iterable unpacking operator. - Zero or more
*iterables
can be used as the arguments passed to the zero or more parameters including a*args
and**kwargs
in a function.
*The memos for **kwargs
:
- A
**kwargs
can store zero or more values as a dictionary. - Only one
**kwargs
can be used in a function. - A
**kwargs
cannot have a default value. - A
**kwargs
must be the last parameter. -
**kwargs
can be other names such as**mykwargs
and**myparam
. *A**
is a dictionary unpacking operator. - Zero or more
**dictionaries
can be used as the arguments passed to the zero or more parameters including a*args
and**kwargs
in a function.
def func(*args, **kwargs): pass
def func(p, *args, **kwargs): pass
def func(p="p", *args, **kwargs): pass
def func(*args, p, **kwargs): pass
def func(*args, p="p", **kwargs): pass
# No error
def func(*args1, *args2, **kwargs): pass
# SyntaxError: * argument may appear only once
def func(*args, **kwargs1, **kwargs2): pass
def func(**kwargs, *args): pass
# SyntaxError: arguments cannot follow var-keyword argument
def func(*args=["John"], **kwargs): pass
def func(*args=*["John"], **kwargs): pass
def func(*args, **kwargs={"name":"John"}): pass
def func(*args, **kwargs=**{"name":"John"}): pass
# SyntaxError: var-positional argument cannot have default value
def func(*args, **kwargs):
print(args, kwargs)
print(*args, *kwargs)
print(*kwargs.keys(), *kwargs.values(), *kwargs.items())
func()
# () {}
# Nothing Nothing
# Nothing Nothing Nothing
func(0, 1, 2)
func(*[0, 1, 2])
func(*(0, 1, 2))
# (0, 1, 2) {}
# 0 1 2 Nothing
# Nothing Nothing Nothing
func([0, 1, 2])
# ([0, 1, 2],) {}
# [0, 1, 2] Nothing
# Nothing Nothing Nothing
func((0, 1, 2))
# ((0, 1, 2),) {}
# (0, 1, 2) Nothing
# Nothing Nothing Nothing
func(fname="John", lname="Smith")
func(**{"fname":"John", "lname":"Smith"})
func(**{"fname":"John"}, **{"lname":"Smith"})
func(fname="John", **{"lname":"Smith"})
func(**{"fname":"John"}, lname="Smith")
# () {'fname': 'John', 'lname': 'Smith'}
# Nothing fname lname
# fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func(*{"fname":"John", "lname":"Smith"})
func(*{"fname":"John"}, *{"lname":"Smith"})
# ('fname', 'lname') {}
# fname lname Nothing
# Nothing Nothing Nothing
func(fname="John", *{"lname":"Smith"})
# ('lname',) {'fname': 'John'}
# lname fname
# fname John ('fname', 'John')
func(*{"fname":"John"}, lname="Smith")
# ('fname',) {'lname': 'Smith'}
# fname lname
# lname Smith ('lname', 'Smith')
func({"fname":"John", "lname":"Smith"})
func({"fname":"John"}, {"lname":"Smith"})
# ({'fname': 'John', 'lname': 'Smith'},) {}
# {'fname': 'John', 'lname': 'Smith'} Nothing
# Nothing Nothing Nothing
func({"fname":"John"}, lname="Smith")
# ({'fname': 'John'},) {'lname': 'Smith'}
# {'fname': 'John'} lname
# lname Smith ('lname', 'Smith')
func(0, 1, 2, fname="John", lname="Smith")
func(*[0, 1, 2], **{"fname":"John", "lname":"Smith"})
func(*(0, 1, 2), **{"fname":"John"}, **{"lname":"Smith"})
# (0, 1, 2) {'fname': 'John', 'lname': 'Smith'}
# 0 1 2 fname lname
# fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func([0, 1, 2], fname="John", **{"lname":"Smith"})
# ([0, 1, 2],) {'fname': 'John', 'lname': 'Smith'}
# [0, 1, 2] fname lname
# fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func((0, 1, 2), **{"fname":"John"}, lname="Smith")
# ((0, 1, 2),) {'fname': 'John', 'lname': 'Smith'}
# (0, 1, 2) fname lname
# fname lname John Smith ('fname', 'John') ('lname', 'Smith')
def func(p="p", *args, **kwargs):
print(p, args, kwargs)
print(p, *args, *kwargs)
print(p,*kwargs.keys(), *kwargs.values(), *kwargs.items())
func()
# p () {}
# p Nothing Nothing
# p Nothing Nothing Nothing
func(0, 1, 2)
func(*[0, 1, 2])
func(*(0, 1, 2))
# 0 (1, 2) {} Nothing
# 0 1 2 Nothing
# 0 Nothing Nothing Nothing
func([0, 1, 2])
# [0, 1, 2] () {}
# [0, 1, 2] Nothing Nothing
# 0 Nothing Nothing Nothing
func((0, 1, 2))
# (0, 1, 2) () {}
# (0, 1, 2) Nothing Nothing
# (0, 1, 2) Nothing Nothing Nothing
func(fname="John", lname="Smith")
func(**{"fname":"John", "lname":"Smith"})
func(**{"fname":"John"}, **{"lname":"Smith"})
func(fname="John", **{"lname":"Smith"})
func(**{"fname":"John"}, lname="Smith")
# p () {'fname': 'John', 'lname': 'Smith'}
# p Nothing fname lname
# p fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func(*{"fname":"John", "lname":"Smith"})
func(*{"fname":"John"}, *{"lname":"Smith"})
# fname ('lname',) {}
# fname lname Nothing Nothing
# fname Nothing Nothing Nothing
func(fname="John", *{"lname":"Smith"})
# lname () {'fname': 'John'}
# lname Nothing fname
# lname fname John ('fname', 'John')
func(*{"fname":"John"}, lname="Smith")
# fname () {'lname': 'Smith'}
# fname Nothing lname
# fname lname Smith ('lname', 'Smith')
func({"fname":"John", "lname":"Smith"})
# {'fname': 'John', 'lname': 'Smith'} () {}
# {'fname': 'John', 'lname': 'Smith'} Nothing Nothing
# {'fname': 'John', 'lname': 'Smith'} Nothing Nothing Nothing
func({"fname":"John"}, {"lname":"Smith"})
# {'fname': 'John'} ({'lname': 'Smith'},) {}
# {'fname': 'John'} {'lname': 'Smith'} Nothing
# {'fname': 'John'} Nothing Nothing Nothing
func({"fname":"John"}, lname="Smith")
# {'fname': 'John'} () {'lname': 'Smith'}
# {'fname': 'John'} Nothing lname
# {'fname': 'John'} lname Smith ('lname', 'Smith')
func(0, 1, 2, fname="John", lname="Smith")
func(*[0, 1, 2], **{"fname":"John", "lname":"Smith"})
func(*(0, 1, 2), **{"fname":"John"}, **{"lname":"Smith"})
# 0 (1, 2) {'fname': 'John', 'lname': 'Smith'}
# 0 1 2 fname lname
# 0 fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func([0, 1, 2], fname="John", **{"lname":"Smith"})
# [0, 1, 2] () {'fname': 'John', 'lname': 'Smith'}
# [0, 1, 2] Nothing fname lname
# [0, 1, 2] fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func((0, 1, 2), **{"fname":"John"}, lname="Smith")
# (0, 1, 2) () {'fname': 'John', 'lname': 'Smith'}
# (0, 1, 2) Nothing fname lname
# (0, 1, 2) fname lname John Smith ('fname', 'John') ('lname', 'Smith')