What does ** (double star/asterisk) and * (star/asterisk) do for parameters?
What does the *
and **
do for param
?
def foo(param1, *param):
def bar(param1, **param):
These are the Special Symbols Used for passing arguments:-
*args (Non-Keyword Arguments)
**kwargs (Keyword Arguments)
The *args and **kwargs is a common idiom to allow arbitrary number of arguments to functions.The *args
will give you all function parameters as a tuple:
def foo(*args):
for a in args:
print(a)
foo(1)
# 1
foo(1,2,3)
# 1
# 2
# 3
The **kwargs will give you all keyword arguments except for those corresponding to a formal parameter as a dictionary.
def bar(**kwargs):
for a in kwargs:
print(a, kwargs[a])
bar(name='one', age=27)
# age 27
# name one
Both idioms can be mixed with normal arguments to allow a set of fixed and some variable arguments:
def foo(kind, *args, **kwargs):
pass
It is also possible to use like given below :
def foo(a, b, c):
print(a, b, c)
obj = {'b':10, 'c':'lee'}
foo(100,**obj)
# 100 10 lee
Another usage is to unpack argument lists when calling a function.
def foo(bar, lee):
print(bar, lee)
l = [1,2]
foo(*l)
# 1 2
In Python 3 it is possible to use *l
on the left side of an assignment (Extended Iterable Unpacking), though it gives a list instead of a tuple in this context:
first, *rest = [1,2,3,4]
first, *l, last = [1,2,3,4]
Also Python 3 adds new semantic :
def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
pass
0 comments:
Post a Comment