TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #142 802
Посмотрите на эту функцию

def my_func():
x = 1
y = 2
...
return x+y

Если я запущу её в таком виде, какую ошибку получу?
Похоже на пример из урока. Скорее всего будет SyntaxError из-за троеточия (...).
Но если вы выполните этот код... ОШИБКИ НЕ БУДЕТ 😳!

Почему❓

Всё дело в том что троеточие это одна из стандартных констант в Python, называется Ellipsis. Такая же как None, True или False.

Это не какой-то тип данных, для него нет каких-либо специальных операторов. Нигде в стандартной библиотеке он не используется.

Хотя, может в распечатке объектов с бесконечной рекурсией (но это не точно).
>>> x = []
>>> x.append(x)
>>> print(x)
[[...]]

Так где же применять эту штуку?
Прежде всего, стоит заметить что этот объект кажется достаточно неуместным для Python.
Ведь Python такой логичный и минималистичный и тут вдруг бесполезная константа которая нигде не встречается!

Но всё же давайте посмотрим как эта константа может быть использована.

🔸 Особый синтаксис срезов
В документации написано что Ellipsis используется для "extended slicing syntax".
Это значит что он используется в слайсинге, но не в стандартном. Его можно применить в расширенном слайсинге, то есть когда переопределяете метод __getitem__ в ваших классах.

>>> class C(object):
>>> def __getitem__(self, item):
>>> return item

Если вы попробуем получить нечто по индексу то в item прилетает этот индекс

>>> C()[1]
1

Но если передать в квадратные скобки несколько аргументов, то в item прилетает кортеж

>>> C()[1, 10]
(1, 10)

Вам остаётся решить как обработать такие аргументы и вернуть "срез" вашего типа.
Ну и ничто не мешает нам использовать (...) в качестве "синтаксического сахара" для реализации какой-то особой логики.

>>> C()[1, ..., 10]
(1, Ellipsis, 10)
>>> C()[3:...]
slice(3, Ellipsis, None)

Вам остаётся лишь решить как именно обработать такой запрос.
Например так:

>>> class C(object):
>>> def __getitem__(self, item):
>>> if item is Ellipsis:
>>> return "RETURN ALL"
>>> return "RETURN BY INDEX"
>>> C()[...]
RETURN ALL

Именно так сделано в numpy

🔸 Аналог для pass
Сравните две записи

def some_func():
pass

def some_func():
...

По-моему, вторая запись более ясно говорит, что здесь что-то имеется в виду и это надо дописать 😉.

Но, несмотря на то, что Ellipsis был доступен еще с древних версий 2.Х, такая запись сработает только в Python3. Для 2го троеточие доступно только в квадратных скобках.

🔸 Заглушка для значений по умолчанию

def func(x=...):
...

Альтернатива None? Совсем уж сомнительно 😖, но работает как визуальный триггер для разработчика)

Всё, больше идей пока нет)
На последок вот такая странная фиговина. Что покажет этот print() ???

#tricks
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →