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!