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

高洛峰
Release: 2016-11-22 17:41:44
Original
1561 people have browsed it

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
Copy after login

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
Copy after login

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
Copy after login

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
Copy after login

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)
Copy after login

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


Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template