Python中的“...”是什么意思?

问题描述 投票:0回答:1

每当我看到任何Python内置函数时,我总是会找到一个带有

...
的函数,例如:

def append(self, __object: _T) -> None: ...

但是,我找不到

...
的含义。是什么意思?

python built-in ellipsis
1个回答
8
投票

...
是名为
Elipsis
的对象的文字,该对象过去仅存在于特殊类型的切片中(例如在
numpy
中)。它是一个单例对象,如
None
NotImplemented

因为

...
意味着您在正常写作中省略或遗漏了某些内容,所以有时在 Python 代码中,文字也会用于相同的目的。如果您正在教某人如何编写函数,您可能会向他们展示像这样的
def
语句:

def foo(bar):
    ...

这里的

...
没有做任何有用的事情,它只是显示你遗漏了函数体的地方。更传统的什么都不做的方式是
pass
语句,但是
...
似乎正在接管,也许特别是当函数 should 有一个主体时,你只是没有显示它。

这种用法在类型提示的用户中变得很常见。当第三方库的作者没有使用类型提示时,通常需要编写“存根”函数来显示第三方库中编写的函数所需的参数类型。存根不需要完整的函数体,因此使用

...
来代替。

由于类型提示是作为 Python 的可选功能引入的,因此解释器在标准库的自己的代码中不包含类型提示,因此必须为内置函数和标准的所有函数和方法创建存根文件图书馆。存根格式化的许多功能已在各种文档中重复使用,因为它简洁地显示了函数所需的类型。

只有一种特定情况下

...
在类型提示中具有特殊含义,那就是
typing.Callable
。您可以提示
Callable[..., int]
引用一个具有未指定参数且返回整数的可调用对象的值。这样做只是因为正确提示所有可调用参数通常很尴尬,特别是对于可以通过多种不同方式调用的函数。有人讨论过添加新语法来更直接地提示
Callable
,但尚未确定(PEP 677 提议用
(int, str) -> bool
来表示
Callable[[int, str], bool]
,但去年 12 月被拒绝)。

© www.soinside.com 2019 - 2024. All rights reserved.