在空闲地浏览名称空间时,我注意到一个名为Ellipsis的奇怪对象,它看起来没有什么特别之处,也没有做什么特别的事情,但它是一个全局可用的内置对象。

经过搜索,我发现Numpy和Scipy在切片语法的一些模糊变体中使用了它。。。但几乎没有其他。

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

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

当前回答

在打字机中。。。用于创建必需的参数:Argument类需要默认值,如果传递。。。如果用户没有传递特定的参数,它将发出抱怨。

如果Ellipsis不在,您可以使用None,但这将消除表示None是默认值的机会,以防在程序中有任何意义。

其他回答

与Python3.5和PEP484一样,在使用类型模块时,文本省略号用于向静态类型检查器表示某些类型。

示例1:

可以使用一种类型和省略号来表示任意长度的同构元组,例如Tuple[int,…]

示例2:

通过用文字省略号(三个点)替换参数列表,可以在不指定调用签名的情况下声明可调用的返回类型:

def partial(func: Callable[..., str], *args) -> Callable[..., str]:
    # Body

其预期用途不应仅限于这些第三方模块。Python文档中没有正确提到它(或者我可能找不到),但省略号。。。实际上在CPython中至少有一个地方使用。

它用于表示Python中的无限数据结构。我在玩列表时发现了这个符号。

有关详细信息,请参阅此问题。

正如@noɥʇʎԀʌzɐɹƆ和@phoenix所提到的,您确实可以在存根文件中使用它。例如

class Foo:
    bar: Any = ...
    def __init__(self, name: str=...) -> None: ...

有关如何使用此省略号的更多信息和示例,请参见此处https://www.python.org/dev/peps/pep-0484/#stub-文件

从Python文档中:

此对象通常用于切片(请参见切片)。它不支持特别行动。只有一个省略号对象,名为椭圆(内置名称)。类型(椭圆)()生成椭圆单例。它被写成椭圆或。。。。

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

def will_do_something():
    ...

这不是魔法;可以使用任何表达式来代替。。。,例如。:

def will_do_something():
    1

(不能使用“受制裁”一词,但我可以说,圭多并没有断然拒绝使用这个词。)

¹“can”不在{“must”,“should”}中