2015-05-26 15 views
5

tôi đang tìm kiếm tại the source code của một Blender add-on và tôi thấy một cú pháp mới:Cú pháp này "..." (dấu chấm lửng) là gì?

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

ý nghĩa của ... là gì?

Trả lời

13

... là một cú pháp theo nghĩa đen cho Python Elipsis object:

>>> ... 
Ellipsis 

Nó được sử dụng chủ yếu bởi NumPy; xem What does the Python Ellipsis object do?

Mã bạn đã tìm thấy sử dụng nó làm sentinel; một cách để phát hiện rằng không có giá trị nào khác được chỉ định cho đối số từ khóa clss. Thông thường, bạn sẽ sử dụng None cho một giá trị như vậy, nhưng điều đó sẽ tự loại bỏ None từ khi được sử dụng làm giá trị.

Cá nhân, tôi không thích sử dụng Ellipsis làm nội dung gửi; Tôi sẽ luôn luôn tạo ra một trọng điểm chuyên dụng thay vì:

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

Sử dụng ... ký hiệu bên ngoài của một thuê bao (object[...]) là một lỗi cú pháp trong Python 2, do đó lừa được sử dụng hạn chế mã để Python 3.

Các vấn đề liên quan