Константа Ellipsis, литерал ...
В Python существует специальная константа Ellipsis
, которая может быть полезна в разных сценариях. Ellipsis
– это объект специального типа данных ellipsis
.
print(Ellipsis) print(type(Ellipsis))
Ellipsis <class 'ellipsis'>
Вместо константы Ellipsis
можно также использовать литерал ...
.
print(... == Ellipsis) print(... is Ellipsis)
True True
Мы можем присвоить значение Ellipsis
(литерал ...
) любой переменной. Все переменные, которым присвоено значение Ellipsis
(литерал ...
), ссылаются на один и тот же объект.
var1 = Ellipsis var2 = ... var3 = Ellipsis print(var1 is var2) print(var1 is var3) print(var2 is var3)
True True True
💡 Объекты, существующие в единственном экземпляре, называются синглтонами. По аналогии с Ellipsis
в Python существует литерал None
, который также является единственным экземпляром типа NoneType
.
Использование Ellipsis
Рассмотрим основные сценарии использования литерала ...
.
Сценарий 1. Использование в качестве заглушки при определении функции или класса. Литерал ...
можно использовать в качестве альтернативы оператору pass
.
def func(): pass class Cat: pass
Приведенный выше код можно переписать в виде:
def func(): ... class Cat: ...
Сценарий 2. Использование при аннотации типов в случае, когда мы хотим определить кортеж (или любой итерируемые объект), содержащий неопределенное количество однотипных значений.
numbers: tuple[int, ...]
определяет переменную numbers
, которая представляет собой кортеж любой длины, содержащий только целые числа.
Таким образом, под определение переменной numbers
подходят:
numbers = () numbers = (4,) numbers = (1, 2, 3, 4)
numbers = (1, 2, 'beegeek') numbers = ('python', 12.5)
Сценарий 3. Использование при аннотации типов в случае, когда мы хотим объявить Callable
-объект, принимающий произвольное количество аргументов любого типа и возвращающий значение определенного типа.
from typing import Callable func: Callable[..., int]
определяет переменную func
, которая представляет собой вызываемый объект, принимающий произвольное количество аргументов любого типа и возвращающий значение типа int
.
Таким образом, под определение переменной func
подходят функции:
def add_5(a: int) -> int: return a + 5 def multiply(a: int, b: int) -> int: return a * b def sum_ord(a: str, b: str) -> int: return ord(a) + ord(b)
def as_str(a: int) -> str: return str(a) def get_lower_and_upper(s: str) -> list: return [s.lower(), s.upper()]
Примечания
Примечание 1. В отличие от литерала None
, который преобразуется встроенной функцией bool()
к False
, константа Ellipsis
(литерал ...
) преобразуется к True
.
print(bool(None)) print(bool(Ellipsis)) print(bool(...))
False True True
if ...: print('bee') else: print('geek')
bee