Basic usage
Default arguments let you call a function without providing all parameters:
def greet(name, greeting="Hello"):
print(f"{greeting}, {name}!")
greet("Alice") # "Hello, Alice!"
greet("Bob", "Hi") # "Hi, Bob!"
Multiple defaults
def create_user(name, age=18, city="Unknown"):
print(f"Name: {name}, Age: {age}, City: {city}")
create_user("Alice") # Uses both defaults
create_user("Bob", 25) # Uses city default
create_user("Charlie", 30, "NYC") # All provided
Important: mutable defaults
Never use mutable objects (lists, dicts) as default values. They're shared across calls:
# WRONG:
def add_item(item, items=[]): # Bad!
items.append(item)
return items
# RIGHT:
def add_item(item, items=None):
if items is None:
items = []
items.append(item)
return items
Order matters
Parameters with defaults must come after parameters without defaults:
# Correct:
def func(a, b, c=10, d=20):
pass
# Wrong:
# def func(a=10, b): # SyntaxError
# pass
When to use defaults
- Optional parameters that have sensible defaults
- Making functions more flexible
- Backward compatibility (adding new optional parameters)
- Reducing the number of function overloads needed