这是什么语法" ..." (省略)?

时间:2015-05-26 15:07:24

标签: python

我正在查看Blender插件的the source code,我看到了一种新的语法:

def elem_name_ensure_class(elem, clss=...):
    elem_name, elem_class = elem_split_name_class(elem)
    if clss is not ...:
        assert(elem_class == clss)
    return elem_name.decode('utf-8')

...是什么意思?

1 个答案:

答案 0 :(得分:14)

...是Python Elipsis object的文字语法:

>>> ...
Ellipsis

它主要由NumPy使用;见What does the Python Ellipsis object do?

您找到的代码将其用作 sentinel ;一种检测为clss关键字参数指定了其他值的方法。通常,您会使用None作为此类值,但这会使None本身无法用作值。

就个人而言,我不喜欢使用Ellipsis作为哨兵;我总是会创建一个专门的哨兵:

_sentinel = object()

def elem_name_ensure_class(elem, clss=_sentinel):
    elem_name, elem_class = elem_split_name_class(elem)
    if clss is not _sentinel:
        assert(elem_class == clss)
    return elem_name.decode('utf-8')

在订阅(...)之外使用object[...]表示法是Python 2中的语法错误,因此使用的技巧将代码限制为Python 3。

相关问题