*Memos:
- My post explains variable assignment.
- My post explains parameters and arguments.
- My post explains iterable unpacking in variable assignment.
-
My post explains
*
for iterable unpacking in variable assignment. -
My post explains
*
for iterable unpacking in function. -
My post explains
*args
and**kwargs
in function.
You can use **
for dictionary unpacking as shown below:
*Memos:
-
**
is a dictionary unpacking operator. - Zero or more
**dictionaries
can be used in a dictionary and as the arguments passed to the zero or more parameters including a*parameter
(*args
) and**parameter
(**kwargs
) in a function: *Memos:- A
**parameter
can store zero or more values as a dictionary. - A
**parameter
is a var-keyword parameter. - A function can have only one
**parameter
which is**kwargs
conventionally. - A
**parameter
cannot have a default value. - A
**parameter
must be the last parameter.
- A
-
**variable
cannot be used in the iterable unpacking of variable assignment.
v1 = {"fname":"John", "lname":"Smith"}
v2 = {"age":36, "gender":"Male"}
v3 = {**v1, **v2}
print(v3) # {'fname': 'John', 'lname': 'Smith', 'age': 36, 'gender': 'Male'}
print(**{}) # Nothing
print(**v3)
print(**{'fname': 'John'}, lname='Smith')
print(fname='John', **{'lname': 'Smith'})
print(**{'fname':'John'}, **{'lname': 'Smith'})
print(**{'fname': 'John', 'lname': 'Smith'})
# TypeError: 'fname' is an invalid keyword argument for print()
print(**[0, 1, 2])
print(**(0, 1, 2))
print(**[])
print(**())
# TypeError: print() argument after ** must be a mapping, not list
**v1, = {"fname":"John", "lname":"Smith"}
**v1, = *{"fname":"John", "lname":"Smith"}
**v1, = **{"fname":"John", "lname":"Smith"}
v1, = **{"fname":"John", "lname":"Smith"}
*v1, = **{"fname":"John", "lname":"Smith"}
# SyntaxError: invalid syntax
def func(**kwargs): pass
def func(**mydict): pass
def func(p, **kwargs): pass
def func(p="param", **kwargs): pass
def func(*args, **kwargs): pass
def func(p, *args, **kwargs): pass
def func(p="param", *args, **kwargs): pass
def func(*args, p, **kwargs): pass
def func(*args, p="param", **kwargs): pass
# No error
def func(**kwargs1, **kwargs2): pass
def func(**kwargs, p): pass
def func(**kwargs, p="param"): pass
def func(**kwargs, *args): pass
# SyntaxError: arguments cannot follow var-keyword argument
def func(**kwargs={"name":"John"}): pass
def func(**kwargs=**{"name":"John"}): pass
# SyntaxError: var-keyword argument cannot have default value
def func(**kwargs):
print(kwargs, *kwargs)
func()
func(*{})
func(**{})
func(*[])
func(*())
# {} 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'} fname lname
func({"fname":"John", "lname":"Smith"})
func({"fname":"John"}, lname="Smith")
func(*{"fname":"John"}, lname="Smith")
func(fname="John", *{"lname":"Smith"})
func([0, 1, 2])
func((0, 1, 2))
func([])
func(())
# TypeError: func() takes 0 positional arguments but 1 was given
func(*{"fname":"John", "lname":"Smith"})
func(*{"fname":"John"}, *{"lname":"Smith"})
func({"fname":"John"}, {"lname":"Smith"})
# TypeError: func() takes 0 positional arguments but 2 were given
func(*[0, 1, 2])
func(*(0, 1, 2))
# TypeError: func() takes 0 positional arguments but 3 were given
def func(**kwargs):
print(**kwargs)
func()
func(**{})
func(*{})
func(*[])
func(*())
# Nothing
func(fname="John", lname="Smith")
func(**{"fname":"John", "lname":"Smith"})
func(**{"fname":"John"}, lname="Smith")
func(fname="John", **{"lname":"Smith"})
# TypeError: 'fname' is an invalid keyword argument for print()
func({"fname":"John", "lname":"Smith"})
func({"fname":"John"}, lname="Smith")
func(*{"fname":"John"}, lname="Smith")
func(fname="John", *{"lname":"Smith"})
func([0, 1, 2])
func((0, 1, 2))
func([])
func(())
# TypeError: func() takes 0 positional arguments but 1 was given
func(*{"fname":"John", "lname":"Smith"})
# TypeError: func() takes 0 positional arguments but 2 were given
func(*[0, 1, 2])
func(*(0, 1, 2))
# TypeError: func() takes 0 positional arguments but 3 were given
def func(p="p", **kwargs):
print(p, kwargs)
print(*kwargs, *kwargs.keys(), *kwargs.values(), *kwargs.items())
func()
# p {}
# Nothing Nothing Nothing Nothing
func(p="param")
func(**{"p":"param"})
# param {}
# Nothing Nothing Nothing Nothing
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'}
# fname lname fname lname John Smith ('fname', 'John') ('lname', 'Smith')
func("param", fname="John", lname="Smith")
func("param", **{"fname":"John", "lname":"Smith"})
func("param", **{"fname":"John"}, lname="Smith")
func("param", fname="John", **{"lname":"Smith"})
func(p="param", fname="John", lname="Smith")
func(**{"p":"param", "fname":"John", "lname":"Smith"})
func(**{"p":"param", "fname":"John"}, lname="Smith")
func(p="param", **{"fname":"John", "lname":"Smith"})
func(**{"p":"param"}, fname="John", lname="Smith")
func(p="param", **{"fname":"John"}, lname="Smith")
func(p="param", fname="John", **{"lname":"Smith"})
func(fname="John", lname="Smith", p="param")
func(**{"fname":"John", "lname":"Smith", "p":"param"})
func(**{"fname":"John", "lname":"Smith"}, p="param")
func(fname="John", **{"lname":"Smith", "p":"param"})
func(**{"fname":"John"}, lname="Smith", p="param")
func(fname="John", **{"lname":"Smith"}, p="param")
func(fname="John", lname="Smith", **{"p":"param"})
# param {'fname': 'John', 'lname': 'Smith'}
# fname lname fname lname John Smith ('fname', 'John') ('lname', 'Smith')
Top comments (0)