Default & Keyword Arguments
Default arguments provide fallback values when no argument is passed. Keyword arguments let you specify which parameter gets which value, making function calls more readable.
15 min•By Priygop Team•Updated 2026
Default & Keyword Arguments
Default & Keyword Arguments
# Default values
def format_name(first, last, upper=False):
full = f"{first} {last}"
return full.upper() if upper else full
print(format_name("Alice", "Smith")) # Alice Smith
print(format_name("Bob", "Jones", upper=True)) # BOB JONES
# Practical: configurable function
def send_email(to, subject="No Subject", urgent=False):
priority = "⚡ URGENT: " if urgent else ""
print(f"Sending to {to}: {priority}{subject}")
send_email("alice@email.com")
send_email("bob@email.com", "Meeting", urgent=True)
send_email("charlie@email.com", subject="Hello")
# CAUTION: Mutable default arguments (common bug!)
# BAD:
def add_item_bad(item, items=[]):
items.append(item)
return items
# GOOD:
def add_item_good(item, items=None):
if items is None:
items = []
items.append(item)
return items
print(add_item_good("apple")) # ['apple']
print(add_item_good("banana")) # ['banana'] (correct!)Tip
Tip
Use None as default for mutable arguments: def func(items=None): items = items or []. This prevents the shared-list bug.
Diagram
Loading diagram…
Function + environment.
Common Mistake
Warning
def func(items=[]): shares the SAME list across all calls. Each call modifies the same default. Always use None as default for lists/dicts.
Practice Task
Note
(1) Demonstrate the mutable default bug. (2) Fix it using None. (3) Write a function with both required and optional keyword args.