我正在查看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')
...
是什么意思?
答案 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。