Home  >  Article  >  Backend Development  >  Understand *args and **kwargs of s variable parameters in Python

Understand *args and **kwargs of s variable parameters in Python

高洛峰
高洛峰Original
2016-11-22 17:41:441562browse

Use variable parameters with default parameters

Python supports variable parameters. The easiest way is to use default parameters, for example:

def test_defargs(one, two = 2):
   print 'Required argument: ', one
   print 'Optional argument: ', two

test_defargs(1)
# result:
# Required argument: 1
# Optional argument: 2

test_defargs(1, 3)
# result:
# Required argument: 1
# Optional argument: 3

Use *args and **kwargs when defining the function

Of course, this article mainly Let’s talk about a way to achieve variable parameters (Variable Argument): use *args and **kwargs syntax. Among them, *args is a variable positional arguments list, and **kwargs is a variable keyword arguments list. Also, *args must come before **kwargs because positional arguments must come before keyword arguments.

First introduce the basic usage of the two.

The following example uses *args and contains a required parameter:

def test_args(first, *args):
   print 'Required argument: ', first
   for v in args:
      print 'Optional argument: ', v

test_args(1, 2, 3, 4)
# result:
# Required argument: 1
# Optional argument:  2
# Optional argument:  3
# Optional argument:  4

The following example uses *kwargs and contains a list of required parameters and *args:

def test_kwargs(first, *args, **kwargs):
   print 'Required argument: ', first
   for v in args:
      print 'Optional argument (*args): ', v
   for k, v in kwargs.items():
      print 'Optional argument %s (*kwargs): %s' % (k, v)

test_kwargs(1, 2, 3, 4, k1=5, k2=6)
# results:
# Required argument:  1
# Optional argument (*args):  2
# Optional argument (*args):  3
# Optional argument (*args):  4
# Optional argument k2 (*kwargs): 6
# Optional argument k1 (*kwargs): 5

When calling a function, use *args and * *kwargs

*args and **kwargs syntax can be used not only in function definitions, but also when calling functions. The difference is that if using *args and **kwargs at the location where the function is defined is a process of packing parameters, then when the function is called, it is a process of unpacking parameters. Let’s use an example to deepen our understanding:

def test_args(first, second, third, fourth, fifth):
    print 'First argument: ', first
    print 'Second argument: ', second
    print 'Third argument: ', third
    print 'Fourth argument: ', fourth
    print 'Fifth argument: ', fifth

# Use *args
args = [1, 2, 3, 4, 5]
test_args(*args)
# results:
# First argument:  1
# Second argument:  2
# Third argument:  3
# Fourth argument:  4
# Fifth argument:  5

# Use **kwargs
kwargs = {
    'first': 1,
    'second': 2,
    'third': 3,
    'fourth': 4,
    'fifth': 5
}

test_args(**kwargs)
# results:
# First argument:  1
# Second argument:  2
# Third argument:  3
# Fourth argument:  4
# Fifth argument:  5

Using *args and **kwargs can be very convenient to define functions, and can also enhance scalability for future code maintenance.

Example

def foo(*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)

Note

Note: When defining or calling this kind of function, follow the following rules:
Variable parameters must come after immutable parameters
*args is a variable positional arguments list, **kwargs is A variable list of keyword arguments. And, *args must be before **kwargs, because positional arguments must be before keyword arguments


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