Home >Backend Development >Python Tutorial >How Does Python's *args and kwargs Handle Function Parameters?

How Does Python's *args and kwargs Handle Function Parameters?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-22 15:41:11772browse

How Does Python's *args and kwargs Handle Function Parameters?

Parameter Unpacking with and in Python Functions*

In Python functions, the and * syntax allows for greater flexibility in parameter handling.

Positional Argument Unpacking (kwargs)

The *args parameter collects all positional arguments as a tuple. For example:

def foo(x, y, *args):
    for a in args:
        print(a)

Calling foo(1, 2, 3) prints:

1
2
3

Keyword Argument Unpacking (kwargs)

The **kwargs parameter collects all keyword arguments as a dictionary. For example:

def bar(x, y, **kwargs):
    for k, v in kwargs.items():
        print(k, v)

Calling bar(x=1, y=2, name='John') prints:

name John

Combined Unpacking

Both idioms can be combined to allow a mix of fixed and variable arguments. For example:

def foo(kind, *args, bar=None, **kwargs):
    print(kind, args, bar, kwargs)

Calling foo(123, 'a', 'b', apple='red') prints:

123 ('a', 'b') None {'apple': 'red'}

Conversely, kwargs can be used to unpack keyword arguments in function calls. For example:

def foo(a, b, c):
    print(a, b, c)

obj = {'b':10, 'c':'lee'}

foo(100, **obj) # Prints 100 10 lee

List and Tuple Unpacking with *

The * syntax can also be used to unpack lists and tuples when calling functions. For example:

def foo(bar, lee):
    print(bar, lee)

baz = [1, 2]

foo(*baz) # Prints 1 2

Extended Iterable Unpacking

In Python 3, * can be used on the left side of an assignment to unpack iterables into individual variables. For example:

first, *rest = [1, 2, 3, 4]
# first = 1
# rest = [2, 3, 4]

Positional-Only Arguments

Python 3 also introduced positional-only arguments. Functions can specify that only certain arguments can be positional. For example:

def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
    pass

This function only accepts 3 positional arguments. All arguments after * must be passed as keyword arguments.

The above is the detailed content of How Does Python's *args and kwargs Handle Function Parameters?. 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