*args and **kwargs allow passing variable number of arguments to a function.
*args — positional arguments:
1def sum_all(*args):2 return sum(args)34sum_all(1, 2, 3) # 65sum_all(1, 2, 3, 4, 5) # 15
**kwargs — named arguments:
1def build_user(**kwargs):2 return {3 "name": kwargs.get("name", "Anonymous"),4 "age": kwargs.get("age", 0),5 "email": kwargs.get("email", "")6 }78user = build_user(name="Alice", age=25, email="a@b.com")
Together:
1def func(a, b, *args, **kwargs):2 print(f"a={a}, b={b}")3 print(f"args={args}")4 print(f"kwargs={kwargs}")