DEV Community

Odipo Otieno (KwargDevs)
Odipo Otieno (KwargDevs)

Posted on

Python *args and **kwargs

[python]: In Python, *args and **kwargs are used to pass a variable number of arguments to a function. They allow for more flexible function definitions and can handle an arbitrary number of positional and keyword arguments, respectively.

*args

  • *args allows a function to accept any number of positional arguments.
  • The arguments are accessible as a tuple within the function.

Example:

def func_with_args(*args):
    for arg in args:
        print(arg)

func_with_args(1, 2, 3, 4)
# Output:
# 1
# 2
# 3
# 4
Enter fullscreen mode Exit fullscreen mode

**kwargs

  • **kwargs allows a function to accept any number of keyword arguments.
  • The arguments are accessible as a dictionary within the function.

Example:

def func_with_kwargs(**kwargs):
    for key, value in kwargs.items():
        print(f"{key} = {value}")

func_with_kwargs(a=1, b=2, c=3)
# Output:
# a = 1
# b = 2
# c = 3
Enter fullscreen mode Exit fullscreen mode

Combining *args and **kwargs

You can use both *args and **kwargs in a single function to handle both positional and keyword arguments.

Example:

def func_with_args_kwargs(*args, **kwargs):
    for arg in args:
        print(f"arg: {arg}")
    for key, value in kwargs.items():
        print(f"{key} = {value}")

func_with_args_kwargs(1, 2, 3, a=4, b=5)
# Output:
# arg: 1
# arg: 2
# arg: 3
# a = 4
# b = 5
Enter fullscreen mode Exit fullscreen mode

Practical Use Case

These constructs are particularly useful when writing functions that need to handle a flexible number of inputs, such as wrappers or decorators, or when designing APIs that need to accept a variety of parameters without requiring a rigid function signature.

By using *args and **kwargs, you can create more adaptable and reusable functions.

Top comments (0)