Python3中的三个点点点(Ellipsis)

平时翻阅源码的时候可能会遇到过这样的函数定义。点。点。点(Ellipsis对象,py2中没有这个...语法)

def main(module: Union[None, str, ModuleType] = ...,
         defaultTest: Union[str, Iterable[str], None] = ...,
         argv: Optional[List[str]] = ...,
         testRunner: Union[Type[TestRunner], TestRunner, None] = ...,
         testLoader: TestLoader = ..., exit: bool = ..., verbosity: int = ...,
         failfast: Optional[bool] = ..., catchbreak: Optional[bool] = ...,
         buffer: Optional[bool] = ...,
         warnings: Optional[str] = ...) -> TestProgram: ...

先看看是啥玩意

type(...)
<class 'ellipsis'>

原来是ellipsis,去查了下官方文档,发现这是个built-in constants,下面是文档的描述

Ellipsis

The same as the ellipsis literal “...”. Special value used mostly in conjunction with extended slicing syntax for user-defined container data types.

切片用的,那和常用的[::]有啥区别吗?

aa = [1,2,3,4,5]
print(aa[:2])
[1, 2]
print(aa[...,2])
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: list indices must be integers or slices, not tuple

看来不是这么用,那到底怎么切片?网上查了下资料,在numpy库的array类型可以用,List不能用

然后明白了文档中的这段话for user-defined container data types...

numpy库install比较费劲,没有继续尝试,截取了网上其他文章的内容片段(https://blog.csdn.net/qq_33363973/article/details/79894982)

>>> x = np.array([[[1],[2],[3]], [[4],[5],[6]]])
>>> x[...,0]
array([[1, 2, 3],
[4, 5, 6]])

>>> x[:,:,0]
array([[1, 2, 3],
       [4, 5, 6]])

x[...,0]就等同于x[:,:,0]

好了,回到文章开头,点点点在函数定义中的这种用法起到了什么作用呢?

官方文档中没有找到相关描述,通过查阅资料了解到作用是 可以用来省略代码,类似于pass占位符

但相比于pass,点点点不但可以在函数体,也可以用在变量的赋值中

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页