Python *args and **kwargs
1. What are *args and **kwargs
*args and **kwargs allow a function to accept a variable number of arguments.
*args→ Variable positional arguments**kwargs→ Variable keyword arguments (key-value pairs)
def demo(*args, **kwargs):
print(args)
print(kwargs)
demo(1, 2, 3, name="Alice", age=30)Enables highly flexible function signatures.
2. Using *args (Variable Positional Arguments)
def add_numbers(*args):
return sum(args)
print(add_numbers(1, 2, 3, 4)) # 10All positional arguments are captured as a tuple.
3. Iterating Over *args
Ideal for functions handling unknown input sizes.
4. Using **kwargs (Variable Keyword Arguments)
All keyword arguments are captured as a dictionary.
5. Combining *args and **kwargs
Supports highly dynamic functions.
6. Order of Parameters
Correct function signature order:
Normal parameters
*argsDefault parameters
**kwargs
Violating this order causes syntax errors.
7. Unpacking Arguments with * and **
Used for data-driven function execution.
8. Forwarding Arguments to Another Function
Common in decorators and middleware.
9. Dynamic API Handler Example
Used in REST clients and flexible service routers.
10. Enterprise-Grade Example
Ideal for dynamic logging, analytics, and telemetry systems.
Comparison: *args vs **kwargs
*args vs **kwargsFeature
*args
**kwargs
Type
Tuple
Dictionary
Purpose
Variable positional parameters
Variable named parameters
Invocation
f(1,2,3)
f(a=1,b=2)
Common Use Cases
Decorators and wrappers
API request builders
Plugin systems
Logging frameworks
Middleware pipelines
Event handlers
Common Mistakes
Assuming
argsis a list (it is a tuple)Forgetting correct parameter order
Overusing when fixed parameters suffice
Naming differently but expecting same semantics
Best Practices
Use descriptive parameter names when possible
Use
*argsfor extensibility, not ambiguityDocument expected parameters clearly
Combine with type hints for clarity
Validate arguments where applicable
Enterprise Value
*args and **kwargs power:
Extensible APIs
Dynamic execution engines
Framework development
Modular application design
Reusable utility functions
They are foundational for building flexible, scalable Python systems.
Last updated