在闲逛名称空间时,我注意到一个看起来很奇怪的对象“ 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
#1楼
它的预期用途不仅应用于这些第三方模块。 在Python文档中没有适当提及它(或者也许我找不到),但是省略号...
实际上至少在一个地方用在CPython中。
它用于表示Python中的无限数据结构。 我在玩列表时遇到了这个符号。
有关更多信息,请参见此问题 。
#2楼
__getitem__
minimal ...
自定义类中的示例
当魔术语法...
在自定义类中传递给[]
时, __getitem__()
会收到一个Ellipsis
类对象。
然后,该类可以使用此Singleton对象执行任何所需的操作。
例:
class C(object):
def __getitem__(self, k):
return k
# Single argument is passed directly.
assert C()[0] == 0
# Multiple indices generate a tuple.
assert C()[0, 1] == (0, 1)
# Slice notation generates a slice object.
assert C()[1:2:3] == slice(1, 2, 3)
# Ellipsis notation generates the Ellipsis class object.
# Ellipsis is a singleton, so we can compare with `is`.
assert C()[...] is Ellipsis
# Everything mixed up.
assert C()[1, 2:3:4, ..., 6] == (1, slice(2,3,4), Ellipsis, 6)
Python内置list
类选择为其赋予范围的语义,当然,对它的任何合理使用也应如此。
就个人而言,我只是在我的API中远离它,而是创建一个单独的,更明确的方法。
已在Python 3.5.2和2.7.12中测试。
#3楼
从Python 3.5和PEP484开始 ,使用键入模块时,文字省略号用于表示静态类型检查器的某些类型。
范例1:
可以使用一种类型和省略号来表示任意长度的同构元组,例如
Tuple[int, ...]
范例2:
通过用文字省略号(三个点)代替参数列表,可以在不指定调用签名的情况下声明可调用对象的返回类型:
def partial(func: Callable[..., str], *args) -> Callable[..., str]:
# Body
#4楼
正如@noɥʇʎԀʎzɐɹƆ和@phoenix提到的-您确实可以在存根文件中使用它。 例如
class Foo:
bar: Any = ...
def __init__(self, name: str=...) -> None: ...
有关如何使用此省略号的更多信息和示例,请参见https://www.python.org/dev/peps/pep-0484/#stub-files
#5楼
总结其他人所说的内容,从Python 3开始,Ellipsis本质上是另一个单例常量,类似于None
,但没有特定的预期用途。 现有用途包括:
- 以切片语法表示剩余维度中的完整切片
- 在类型提示中仅指示类型的一部分(
Callable[..., int]
或Tuple[str, ...]
) - 在类型存根文件中以指示存在默认值而不指定它
可能的用途包括:
- 作为
None
有效选项的地方的默认值 - 作为尚未实现的功能的内容
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3160428