LeetCampus
Interview Question

What are Function Annotations in Python?

July 24, 2025
0 views
Difficulty: Medium
Popularity: Common
Share on

Question Explanation

Function Annotations in Python are a way to attach metadata to function parameters and return values. They were introduced in Python 3 as a way to provide additional context about the types of arguments a function expects and what it returns. Interviewers often ask about function annotations to assess a candidate’s understanding of type hints, which can enhance code readability and maintainability. Understanding function annotations is crucial in collaborative environments where code is shared among multiple developers.

Historically, Python has been dynamically typed, meaning types are checked at runtime. Function annotations offer a way to introduce optional type hints without changing the dynamic nature of the language. They can be especially beneficial in larger codebases where explicit type information can reduce bugs and improve code clarity. However, a common misconception is that annotations enforce type checking at runtime; they do not. Instead, tools like mypy can be used to statically check types based on these annotations.

In summary, knowing how to use function annotations can help in creating self-documenting code and facilitate better communication among team members regarding expected input and output types.

Sample Answers

Example 1: Basic Usage of Function Annotations

In Python, function annotations are defined by placing a colon (:) after the parameter name followed by the type hint. Here’s a simple example:

def greet(name: str) -> str:
    return f'Hello, {name}!'

In this example, name: str indicates that the name parameter should be a string, while -> str indicates that the function returns a string. This kind of information helps developers understand how to use the function without needing to read its implementation details. Although Python does not enforce these types, they serve as useful documentation and can be validated using type checking tools like mypy.

Example 2: Advanced Function Annotations

Function annotations can also be used with more complex types such as lists or dictionaries. For example:

from typing import List

def process_numbers(numbers: List[int]) -> float:
    return sum(numbers) / len(numbers) if numbers else 0.0

In this function, numbers: List[int] indicates that the numbers parameter should be a list of integers. The return type is a float. This level of detail helps to ensure that the function is used correctly, especially in collaborative projects where multiple developers might interact with the code. Additionally, using type hints in this way allows for better integration with IDEs that can provide autocomplete suggestions based on the expected types.

Example 3: Function Annotations with Custom Types

You can also create custom types using classes and annotate them in function signatures. For instance:

class Point:
    def __init__(self, x: float, y: float):
        self.x = x
        self.y = y


def move(point: Point, dx: float, dy: float) -> Point:
    return Point(point.x + dx, point.y + dy)

Here, the move function takes a Point object and two float values, returning a new Point. This approach not only clarifies the expected types but also leverages the object-oriented nature of Python, allowing for more complex data structures. Custom type annotations can significantly improve the expressiveness of your code, making it easier for others to understand your intentions.

Keywords

Pythonfunction annotationstype hintsdynamic typingcode readability

Ready to practice more questions?

Explore our collection of technical interview questions from top companies.

View All Questions