这个问题最近在另一个问题中出现。我将从那里详细解释我的答案:
Ellipsis是可以在切片符号中出现的对象。例如:
myList[1:2, ..., 0]
它的解释完全取决于实现__getitem__
函数并在那里看到Ellipsis
对象的内容,但其主要(也是预期的)用途是在第三方库numpy中,该库添加了多维数组类型。由于存在多个维度,因此对于切片的操作比仅使用起始和停止索引更为复杂;能够在多个维度上进行切片非常有用。例如,给定一个4×4的数组,左上角区域将由切片[:2, :2]
定义:
>>> a
array([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12],
[13, 14, 15, 16]])
>>> a[:2, :2] # top left
array([[1, 2],
[5, 6]])
进一步扩展,省略号 (Ellipsis) 在这里用于表示未指定的数组维度的占位符。它表示在其所放置的间隙中对所有维度使用完整切片 [:]
,因此对于一个三维数组,a[..., 0]
与 a[:, :, 0]
相同,对于四维数组,则为 a[:, :, :, 0]
,类似地,a[0, ..., 0]
等同于 a[0, :, :, 0]
(其中每个冒号代表数组中剩余的维数)。
有趣的是,在Python3中,省略号字面量 (...
) 可以在切片语法之外使用,因此您实际上可以编写:
>>> ...
Ellipsis
编辑:省略号也被用于标准库中的typing
模块:例如,Callable[..., int]
表示返回int
的可调用对象,但没有指定签名;或者tuple [str,...]
表示一个长度可变的由字符串组成的同构元组。
[[...]]
会发生什么?” 我猜测会抛出语法错误。但是,它返回了“[[Ellipsis]]”。Python真是太奇怪了。随后进行的谷歌搜索将我带到了这个页面。 - Cyoce...
只是一个占位符,并且与Ellipsis
没有任何关系。 - Eevee