每当我看到任何Python内置函数时,我总是会找到一个带有
...
的函数,例如:
def append(self, __object: _T) -> None: ...
但是,
...
是什么意思?
...
是名为 Ellipsis
的对象的文字,该对象过去仅存在于特殊类型的切片(例如 numpy
中的 )。它是一个单例对象,如 None
和 NotImplemented
。
因为
...
意味着您在正常写作中省略或遗漏了某些内容,所以有时在 Python 代码中,文字也会用于相同的目的。如果您正在教某人如何编写函数,您可能会向他们展示像这样的 def
语句:
def foo(bar):
...
这里的
...
没有做任何有用的事情,它只是显示你遗漏了函数体的地方。更传统的什么都不做的方式是 pass
语句,但是 ...
似乎正在接管,也许特别是当函数 should 有一个主体时,你只是没有显示它。
这种用法在类型提示的用户中变得很常见。当第三方库的作者没有使用类型提示时,通常需要编写“存根”函数来显示第三方库中编写的函数所需的参数类型。存根不需要完整的函数体,因此使用 ...
来代替。
只有一种特定情况下
...
在类型提示中具有特殊含义,
即
Callable
。您可以提示
Callable[..., int]
引用一个具有未指定参数且返回整数的可调用对象的值。这样做只是因为正确提示所有可调用参数通常很尴尬,特别是对于可以通过多种不同方式调用的函数。有人讨论过添加新语法来更直接地提示 Callable
,但尚未确定(PEP 677提议用
(int, str) -> bool
来表示 Callable[[int, str], bool]
,但去年 12 月被拒绝)。