Skip to content

Instantly share code, notes, and snippets.

@promto-c
Last active August 10, 2026 15:32
Show Gist options
  • Select an option

  • Save promto-c/f51cc2c0eb8742ce5cc3e65601df2deb to your computer and use it in GitHub Desktop.

Select an option

Save promto-c/f51cc2c0eb8742ce5cc3e65601df2deb to your computer and use it in GitHub Desktop.
Comprehensive Guide to the Ellipsis in Python: Usage, Examples, and Best Practices

Understanding the Ellipsis (...) in Python

Overview

The Ellipsis object, represented by ..., is a unique, singleton feature in Python's syntax, akin to None. It serves a variety of purposes in different contexts, ranging from a placeholder in code to a tool in advanced programming scenarios.

Table of Contents

  1. Placeholder for Incomplete Code
  2. Advanced Slicing in NumPy
  3. Type Hints for Variadic Parameters
  4. Custom Container Types

1. Placeholder for Incomplete Code

In custom Python classes or functions, the Ellipsis serves as a placeholder. This is particularly useful for drafting out APIs or class structures where the implementation details will be added later.

Example:

def future_implementation():
    ...

2. Advanced Slicing in NumPy

The Ellipsis is employed in libraries like NumPy for concise and effective slicing of multi-dimensional arrays.

Example:

import numpy as np

# Creating a 3D numpy array
array = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])

# Slicing the array using Ellipsis
sliced_array = array[..., 1]
print(sliced_array)

Output:

[[2 4]
 [6 8]]

Here, array[..., 1] targets the second element of the last dimension across all preceding dimensions, demonstrating the Ellipsis's utility in array slicing.

3. Type Hints for Variadic Parameters

Introduced in PEP 484, type hints in Python utilize the Ellipsis to indicate arbitrary argument types in callable annotations.

Example:

from typing import Callable

FuncType = Callable[..., int]  # Function with any arguments returning an int

4. Custom Container Types

In custom container classes that mimic complex data structures, the Ellipsis can facilitate customized behaviors for slicing or element access.

Example:

class MyCustomContainer:
    def __getitem__(self, key):
        if key is Ellipsis:
            return "Accessing all elements"
        else:
            return f"Accessing element {key}"

container = MyCustomContainer()
print(container[...])  # Special handling for Ellipsis
print(container[1])    # Regular element access

Output:

Accessing all elements
Accessing element 1

This example highlights the Ellipsis's role in triggering specific behaviors in custom data structures.

Conclusion

The Ellipsis (...) in Python is a multifaceted object, enhancing code representation, array slicing capabilities, and aiding in type hinting for variadic functions. Its understanding can lead to more elegant and efficient Python coding practices.

@simaoafonso-pwt

simaoafonso-pwt commented Aug 10, 2026 •

Copy link
Copy Markdown

Typing

When handling functions that handle ellipsis as arguments or return values, you cannot use ... directly as the typing expression, this is ambiguous with the syntax shown above.

You need to import the Ellipsis type, and use it. Note that this has only been included in Python 3.10.

Example:

Import the correct type:

import typing
import sys

if typing.TYPE_CHECKING:
    if sys.version_info >= (3, 10):
        from types import EllipsisType
    else:
        from builtins import ellipsis as EllipsisType

In the variable itself:

def fn(arg_ellipsis: 'EllipsisType') -> None

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment