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,
name
defaults 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
*args
collects 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
**kwargs
collects 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
/**kwargs
judiciously 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.