我正在查看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')
是什么意思...
?
...
是PythonElipsis
对象的文字语法:
>>> ...
Ellipsis
它主要由NumPy使用;请参阅Python Ellipsis对象做什么?
您找到的代码将其用作标记。一种检测没有为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')
在Python 2...
中使用订阅(object[...]
)外部的表示法是语法错误,因此使用的技巧将代码限制为Python 3。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句