2015-01-08 19 views
6

official Python 2.7 docs cho các phương pháp này nghe gần như giống hệt nhau, với sự khác biệt duy nhất dường như là loại bỏ() tăng một KeyError trong khi loại bỏ thì không.Sự khác nhau về thời gian chạy giữa các phương thức set.discard và set.remove trong Python?

Tôi tự hỏi nếu có sự khác biệt về tốc độ thực thi giữa hai phương pháp này. Không có điều đó, có bất kỳ sự khác biệt có ý nghĩa (chặn KeyError) giữa chúng?

Trả lời

16

Tăng ngoại lệ trong một trường hợp là chênh lệch khá có ý nghĩa. Nếu cố gắng xóa phần tử khỏi tập hợp không có lỗi, bạn nên sử dụng set.remove() thay vì set.discard().

Hai phương pháp giống hệt nhau trong việc thực hiện, ngoại trừ việc so với set_discard() các set_remove() function thêm dòng:

if (rv == DISCARD_NOTFOUND) { 
    set_key_error(key); 
    return NULL; 
} 

Điều này đặt ra KeyError. Vì công việc này hơi hơn một chút, nên set.remove() là số thiếu niên kém nhất chậm hơn; CPU của bạn phải làm thêm một thử nghiệm trước khi trở về. Nhưng nếu thuật toán của bạn phụ thuộc vào ngoại lệ thì thử nghiệm phân nhánh bổ sung hầu như không quan trọng.

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