Ellipsis의 의미Ellipsis는 파이썬의 내장 싱글턴(singleton) 객체로, ... (점 세 개)로 축약해서 쓸 수 있습니다. None, True, False처럼 파이썬 언어 자체에 내장된 특수 상수입니다.
>>> Ellipsis
Ellipsis
>>> ...
Ellipsis
>>> ... is Ellipsis
True
>>> type(...)
<class 'ellipsis'>
가장 흔한 용도는 "아직 구현하지 않았지만 문법적으로는 뭔가 채워야 하는 자리"를 표시하는 것입니다. pass와 비슷하지만 의미가 다릅니다.
def not_implemented_yet():
... # pass 대신 사용 가능
class MyClass:
def method(self):
...
pass: "여기서는 아무 것도 하지 않는다"는 명시적 의도...: "여기에 나중에 구현이 들어갈 자리" 혹은 "이 시그니처만 의미가 있고 본문은 중요하지 않다"는 뉘앙스@overload에서의 용도 (앞서 예제와 연결)typing.overload로 장식된 함수는 실제로 실행되지 않으므로, 본문에 굳이 로직을 쓸 필요가 없습니다. 이때 관례적으로 ...를 사용합니다.
@overload
def sum(self, a: int, b: int) -> int: ...
이건 "이 함수는 시그니처(타입 정보)만 제공하고, 실제 코드는 없다"는 뜻을 명확히 드러내는 파이썬 커뮤니티의 관습(convention)입니다.
.pyi)에서의 용도타입 스텁 파일(.pyi)에서도 함수 본문 대신 ...를 사용해 "구현은 다른 곳에 있고, 여긴 타입 정보만 제공한다"는 것을 나타냅니다.
# some_module.pyi
def foo(x: int) -> str: ...
class Bar:
x: int
def method(self, y: str) -> None: ...
가변 길이 튜플 타입 힌트에도 사용됩니다.
def process(*args: int) -> None: ...
x: Tuple[int, ...] # 정수가 몇 개든 상관없는 튜플
다차원 배열 인덱싱에서 "나머지 차원은 그대로 둔다"는 의미로 사용됩니다. 이건 파이썬 자체보다는 NumPy에서 활발히 쓰이는 관용구입니다.
import numpy as np
arr = np.zeros((3, 4, 5))
arr[..., 0] # arr[:, :, 0] 과 동일 — 마지막 차원만 인덱싱, 나머지는 전체 선택
arr[0, ...] # arr[0, :, :] 과 동일
| 용도 | 설명 |
|---|---|
| 함수/클래스 본문 자리표시자 | pass 대용, "미구현" 또는 "타입 정보만 의미 있음"을 표현 |
@overload 데코레이터 함수 | 실제 실행되지 않는 시그니처 선언의 본문 |
타입 스텁(.pyi) 파일 | 실제 구현 없이 타입 정보만 제공 |
| 가변 길이 튜플 타입 힌트 | Tuple[int, ...]처럼 "개수 제한 없음"을 표현 |
| NumPy 등 슬라이싱 | 여러 차원을 한 번에 선택할 때 "나머지 축은 그대로" 의미 |
한마디로 Ellipsis(...)는 "여기엔 의도적으로 뭔가 빠져 있다" 또는 "생략됐다"는 것을 문법적으로 유효하게 표현하는 파이썬의 특수 객체입니다.