Phase 4 of 25 · Topic 4.3

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.