Ellipsis

在Python中,一切皆对象,...是Ellipsis对象。

1
2
3
4
>>> ...
Ellipsis
>>> type(...)
<class 'ellipsis'>

它是一个单例。

1
2
3
4
>>> id(...)
4534353712
>>> id(...)
4534353712

作用

numpy中的切片操作

1
2
3
4
import numpy as np

array = np.random.rand(2, 2, 2, 2)
print(array[..., 0])

在上面的例子中,[:, :, :, 0] , [Ellipsis, 0][..., 0]是等价的。

类型提示

当函数中的参数允许任何类型时

下面的例子假定x的类型为Any

1
2
3
4
5
def foo(x: ...) -> None:
return x + x

print(foo(2))
print(foo("e"))

下面的例子假定func的参数为Any, 返回值为int

1
2
3
4
5
6
from typing import Callable

def inject(func: Callable[..., int]) -> None:
return func() + 5

print(inject(lambda: 4))

当成pass用

1
2
def foo():
...

当成参数默认值用

1
2
3
4
5
6
7
8
9
10
11
def foo(x=...):
return x

print(foo()) # output: Ellipsis
print(foo(2)) # output: 2

def bar(x=None):
return x

print(bar()) # output: None
print(bar(2)) # output: 2

Reference