Positional-Only (/), Keyword-Only (*), *args & **kwargs
1Concept
Python supports exact parameter constraints: parameters before `/` are strictly Positional-Only; parameters after `*` are strictly Keyword-Only; `*args` captures variable positional arguments into a tuple; `**kwargs` captures variable keyword arguments into a dict.
2Architecture Diagram
def func(pos_only, /, standard, *, kw_only, **kwargs):
| | |
No kwarg! Flexible Must be named!3Code Example
Python 3.12
def configure_service(host: str, port: int, /, timeout: float = 5.0, *, ssl: bool = True, **tags):
print(f"Host: {host}:{port} | Timeout: {timeout}s | SSL: {ssl}")
print(f"Metadata Tags: {tags}")
configure_service("10.0.0.1", 8443, 2.5, ssl=True, env="PROD", region="us-east-1")4Expected Output
Host: 10.0.0.1:8443 | Timeout: 2.5s | SSL: True
Metadata Tags: {'env': 'PROD', 'region': 'us-east-1'}5Key Takeaways
- ✓Positional-only `/` allows renaming parameter names in libraries without breaking callers.
- ✓Keyword-only `*` prevents silent argument transposition bugs in functions with multiple flags.
- ✓Order must strictly be: positional-only, standard, args, keyword-only, kwargs.