Home >Backend Development >Python Tutorial >Comparative explanation of the usage of *args and **kwargs in Python

Comparative explanation of the usage of *args and **kwargs in Python

巴扎黑
巴扎黑Original
2017-08-22 14:24:101611browse

*args represents any multiple unnamed parameters, which is a tuple; **kwargs represents keyword parameters, which is a dict.

def fun(*args, **kwargs):
    print 'args = ', args
    print 'kwargs = ', kwargs
    print '###'
if __name__ == '__main__':
    foo(1,2,3,4)
    foo(a=1,b=2,c=3)
    foo(1,2,3,4, a=1,b=2,c=3)
    foo('a', 1, None, a=1, b='2', c=3)

The output results are as follows:

args =  (1, 2, 3, 4) 
kwargs =  {} 
###
args =  () 
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
###
args =  (1, 2, 3, 4) 
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
###
args =  ('a', 1, None) 
kwargs =  {'a': 1, 'c': 3, 'b': '2'} 
###

As you can see, these two are variable parameters in python.

Note: When using *args and **kwargs at the same time, the *args parameter must be listed before **kwargs, like foo(a=1, b='2', c=3, a', 1, None, ) will prompt a syntax error "SyntaxError: non-keyword arg after keyword arg".

def fun2(param1, *args, **kwargs):
    print 'param1 = ', param1
    print 'args = ', args
    print 'kwargs = ', kwargs
    print '###'
fun2(1, 2, 3, 4, a=1,b=2,c=3)

Output result:

param1 =  1
args =  (2,3,4)
kwargs =  {'a': 1, 'c': 3, 'b': 2} 
###

1 is assigned to param1, the remaining 2, 3, and 4 are assigned to *args, and the others are assigned to **kwargs

There is also a very beautiful usage, which is to create a dictionary:

def kw_dict(**kwargs):
    return kwargs
print kw_dict(a=1,b=2,c=3)

Result:

{'a':1, 'b':2, 'c':3}

In fact, there is a dict class in python, use dict(a=1,b= 2,c=3) to create a dictionary.

The above is the detailed content of Comparative explanation of the usage of *args and **kwargs in Python. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn