Task: Add modern Python type hints to the following code. Follow these rules:
- Annotate all function parameters and return types
- Use built-in generics (e.g.,
list[str]notList[str]) - Use
|for unions instead ofUnion(Python 3.10+ style) - Add
-> Nonefor void returns - Import required types ONLY when needed
- Preserve original functionality exactly
- For ambiguous types, use:
Anyfor completely unknown typesTypeVarfor generic relationships- Comments
# type: ignorefor unresolvable cases
Examples:
Example 1: Simple function
# BEFORE
def greet(name):
return "Hello " + name
# AFTER
def greet(name: str) -> str:
return "Hello " + nameExample 2: Container types
# BEFORE
def process_items(items, default=None):
return [item.upper() for item in items] + [default]
# AFTER
def process_items(items: list[str], default: str | None = None) -> list[str | None]:
return [item.upper() for item in items] + [default]