Константа 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