Monday, 28 September 2020

SOLVED - What does ** and * do for parameters?

 

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

 

Copyright @ 2013 Appychip.

Designed by Appychip & YouTube Channel