Python Functions: Default Arguments, *args, and **kwargs
Python functions support advanced features like default values, variable-length arguments, and keyword arguments. In this guide, you’ll learn how to use default arguments, *args, and **kwargs to write flexible and reusable code.
Default Arguments
Function with Default Argument
def greet(name="Guest"):
return f"Hello, {name}!"
Explanation
- Default arguments provide a fallback value if the caller doesn’t supply one.
- In this example,
namedefaults to"Guest".
Example Usage
print(greet()) # Output: "Hello, Guest!"
print(greet("Alice")) # Output: "Hello, Alice!"
Variable-Length Arguments: *args
Function with *args
def calculate_sum(*args):
return sum(args)
Explanation
*argscollects extra positional arguments into a tuple.- Useful for functions that handle an unknown number of inputs.
Example Usage
print(calculate_sum(10, 20, 30)) # Output: 60
Keyword Arguments: **kwargs
Function with **kwargs
def describe_server(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
Explanation
**kwargscollects extra keyword arguments into a dictionary.- Ideal for functions requiring dynamic or named parameters.
Example Usage
describe_server(name="server1", status="running")
Output:
name: server1 status: running
Practice Work
Exercise 1: Default Arguments
Create a function create_user with default parameters for username (default: “guest”) and role (default: “user”).
# Your code here
def create_user(username="guest", role="user"):
return f"User '{username}' created as {role}"
Exercise 2: Use *args
Write a function multiply_all that multiplies all input numbers.
print(multiply_all(2, 3, 4)) # Expected Output: 24
def multiply_all(*args):
result = 1
for num in args:
result *= num
return result
Exercise 3: Use **kwargs
Create a function build_profile that prints user details dynamically.
build_profile(name="Alice", age=30, role="Admin")
def build_profile(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
Workshop: Real-World Applications
Workshop 1: Configuring Servers
Use **kwargs to dynamically configure server settings:
def configure_server(**settings):
for setting, value in settings.items():
print(f"Setting {setting} to {value}")
configure_server(host="192.168.1.1", port=8080, https=True)
Workshop 2: Shopping Cart
Use *args to calculate the total price of items:
def calculate_total(*prices):
return sum(prices)
print(calculate_total(10.5, 20.0, 15.75)) # Output: 46.25
Best Practices
- Avoid Mutable Defaults: Default arguments like
def func(arg=[])can lead to unexpected behavior. - Order of Parameters: Define parameters in this order: positional,
*args, keyword,**kwargs. - Clarity Over Cleverness: Use
*args/**kwargsjudiciously to keep code readable.
Summary and Key Takeaways
- Default Arguments: Provide fallback values for parameters.
- *args: Handle variable positional arguments as a tuple.
- **kwargs: Handle variable keyword arguments as a dictionary.
- Flexibility: These features make functions adaptable to diverse use cases.
Conclusion
Mastering default arguments, *args, and **kwargs empowers you to write versatile and reusable functions. Practice these concepts to handle dynamic inputs and build robust Python applications.
Next Steps: Explore Python Decorators or Object-Oriented Programming in Python.

