Многоцелевой объект многоточие (Ellipsis) в Python

Опубликован: 16.12.2023 60

Многоточие ( ... ) - это специальный объект Python под названием Ellipsis, который можно вызвать, если ввести три точки (...) или Ellipsis.

Ellipsis является так называемым "синтаксическим сахаром" , предоставляющим программисту альтернативный способ записи уже имеющихся синтаксических конструкций, но более удобным, кратким способом.

Ellipsis имеет многоцелевой характер применения: от простого заполнителя кода до инструмента в продвинутых сценариях программирования.

Ellipsis как заполнитель для ненаписанного кода.

При разработке пользовательских функций или классов многоточие ( ... ) можно использовать как заполнитель еще ненаписанного кода. Это особенно полезно при разработке модулей или структур классов, где сначала нужно обозначить структуру модуля или класса, а детали реализации будут добавлены позже.

Например, Ellipsis можно использовать в качестве заполнителя для функции или класса (указав многоточие ... или вызвав сам объект Ellipsis, что фактически тождественно оператору pass).

from typing import TypeVar, Iterator, Generic

T = TypeVar('T')
class MyIter( Iterator[T], Generic[T] ):
    ...

class Tree:
    ...
    def leaves(self) -> List['Tree']:
        ...

# альтернативный способ 
def another_function():
    pass

Использование Ellipsis для слайсинга многомерных массивов в NumPy.

Многоточие ( ... ) используется в библиотеках, таких как NumPy, для краткого и эффективного разбиения многомерных массивов.

Например, если трехмерный массив и необходимо разделить на части, то это можно сделать как минимум тремя способами:

import numpy as np

arr = np.random.rand(2, 3, 2)
print(arr)

[[[0.41799145 0.04858386]
  [0.55427106 0.76501715]
  [0.65110561 0.91901972]]

 [[0.07514992 0.35822602]
  [0.48512622 0.31399117]
  [0.39262452 0.03085063]]]

# традиционный способ
print( arr[ :, :, 1] )
[[0.04858386 0.76501715 0.91901972]
 [0.35822602 0.31399117 0.03085063]]

# слайсинг с использованием многоточия ( ... )
print( arr[ ... , 1] )
[[0.04858386 0.76501715 0.91901972]
 [0.35822602 0.31399117 0.03085063]]

# слайсинг с использованием объекта Ellipsis
print( arr[ Ellipsis , 1] )
[[0.04858386 0.76501715 0.91901972]
 [0.35822602 0.31399117 0.03085063]]

Использование Ellipsis (многоточие ... ) является наиболее экономичным способом разделения многомерного массива, так как требует наименьшего набора кода.

Использование Ellipsis для аннотации типов объектов.

Аннотации типов, введенные в Python версии 3.5. (PEP 484), используют многоточие ( ... ) для указания произвольных типов аргументов в вызываемых объектах.

Фреймворки, ожидающие функций обратного вызова определенных сигнатур, могут иметь аннотацию типа, используя Callable[[Arg1Type, Arg2Type], ReturnType].

В такой аннотации можно объявить возвращаемый тип вызываемого объекта без указания сигнатуры вызова, заменив список аргументов многоточием ... (тремя точками):

from typing import Callable

# Функция с произвольными аргументами, возвращающая значение int
FuncType = Callable[..., int]

def partial(func: Callable[..., int], *args) -> Callable[..., int]:
    # тело функции

Обратите внимание, что вокруг многоточия нет квадратных скобок.

Таким образом, Ellipsis - это многоцелевой специальный объект, использование которого в некоторых случаях может быть полезно (особенно при работе с многомерными структурами данных).

Похожие посты

Методы преобразования списка в строку и обратно

Удаление дубликатов из списка

Фильтрация элементов итератора с помощью bool-списка функции itertools.compress()

Пропуск не нужных элементов последовательности с помощью itertools.dropwhile()

Комментариев нет.