省略号对象有什么作用?

新手上路,请多包涵

在闲逛命名空间时,我注意到一个名为 Ellipsis 的奇怪对象,它似乎没有任何特殊之处或没有做任何特别的事情,但它是一个全球可用的内置函数。

经过搜索,我发现它被 Numpy 和 Scipy 用于切片语法的一些模糊变体中……但几乎没有别的。

这个对象是否专门添加到语言中以支持 Numpy + Scipy?省略号有任何通用的含义或用途吗?

 D:\workspace\numpy>python
Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> Ellipsis
Ellipsis

原文由 Salim Fadhley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 281
2 个回答

这最近出现在另一个 问题 中。我将从那里详细说明我的 答案

省略号 是可以出现在切片符号中的对象。例如:

 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]])

进一步扩展,这里使用省略号来指示未指定的其余数组维度的占位符。将其视为表示完整切片 [:] 对于它放置的间隙中的所有维度,因此对于 3d 数组, a[..., 0]a[:, :, 0] 对于 4d a[:, :, :, 0] ,类似地, a[0, ..., 0]a[0, :, :, 0] (数组中的中间维度有多少冒号)。

有趣的是,在 python3 中,省略号文字 ( ... ) 在切片语法之外可用,因此您实际上可以编写:

 >>> ...
Ellipsis

编辑:标准库中也使用省略号 typing 模块:例如 Callable[..., int] tuple[str, ...] 可调用返回 int --- 表示可变长度的同构字符串元组。

原文由 Brian 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 Python 3 中,您 可以 ¹ 使用省略号文字 ... 作为尚未编写的代码的“nop”占位符:

 def will_do_something():
    ...

不是 魔术;可以使用任何表达式代替 ... ,例如:

 def will_do_something():
    1

(不能使用“批准”一词,但我可以说这种使用 并未被 Guido 断然拒绝。)

¹ 'can' not in {'must', 'should'}

原文由 tzot 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题