这个语法“...”(省略号)是什么? [复制]

2023-11-25

我在看源代码一个 Blender 插件的版本,我看到了一个新的语法:

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')

是什么意思...?


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

>>> ...
Ellipsis

它主要由 NumPy 使用;看Python Ellipsis 对象有什么作用?

您找到的代码将其用作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。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个语法“...”(省略号)是什么? [复制] 的相关文章

随机推荐