2017-10-12 18 views
6

Tôi là người mới sử dụng Python. Hãy giải thích tại sao python không có trường hợp chuyển đổi?Tại sao Python không có trường hợp chuyển đổi?

Cảm ơn bạn rất nhiều

+2

Họ không phải là rất hữu ích. Nó an toàn hơn khi gắn bó với 'if ... elif' hơn' chuyển'. Chúng dẫn đến những lỗi khủng khiếp nếu bạn không cẩn thận. – Unni

+0

Để giải quyết sự cố, bạn có thể tham khảo [Có giá trị nào cho việc thực hiện Chuyển đổi/Trường hợp bằng Python không?] (Https://stackoverflow.com/q/5440990/6521116) –

Trả lời

18

Chúng tôi coi nó tại một thời điểm, nhưng không có một cách để khai báo tên là hằng số, không có cách nào để tạo ra một bảng nhảy hiệu quả. Vì vậy, tất cả những gì chúng ta còn lại là cú pháp cú pháp cho một thứ mà chúng ta có thể làm với các chuỗi if-elif-elif-else.

Xem PEP 275PEP 3103 để có cuộc thảo luận đầy đủ. Lý do cơ bản là các đề xuất khác nhau không thể đáp ứng được yêu cầu của mọi người về trường hợp chuyển đổi sẽ làm gì và họ không cải thiện được các giải pháp hiện có (như công văn dựa trên từ điển, if-elif-chains, getattr- dựa trên công văn, hoặc công khai đa hình gửi đến các đối tượng với các triển khai khác nhau cho cùng một phương pháp).

+2

'case 1:' là khá ổn định, nhưng không có * đặt tên * hằng số, bạn phải sử dụng các số ma thuật ở khắp mọi nơi và chúng tôi không muốn cấu trúc cú pháp khuyến khích các số ma thuật. – user2357112

3

Có nghĩa đen là một phần trong tài liệu để trả lời câu hỏi này. Xem dưới đây:

Why isn’t there a switch or case statement in Python?

TL; DR: giải pháp thay thế hiện có (công văn động thông qua getattr hoặc dict.get, if/elif chuỗi) bao gồm tất cả các trường hợp sử dụng tốt.

0

Mặc dù Java, C++, C# hỗ trợ cho họ, tôi chưa bao giờ sử dụng switch statements vì tôi có thể thực hiện cùng một công việc với các câu lệnh bị xích.

+2

Không trả lời câu hỏi được yêu cầu ... – qwr

+0

Mặc dù nó không trả lời Câu hỏi 1: 1, nhưng đây là một tuyên bố mạnh mẽ, có thể được sử dụng làm thước đo để đoán xem liệu nó có lỗi thời hay không. Bạn đã bao giờ có trường hợp, nơi bạn đang tìm kiếm một tuyên bố 'switch'? – user1767754

+0

Bởi vì bạn không bao giờ cần một vấn đề hiệu suất (noob) :( –

1
def f(x): 
    return { 
     1 : 'output for case 1', 
     2 : 'output for case 2', 
     3 : 'output for case 3' 
    }.get(x, 'default case') 

Bạn có thể sử dụng như trường hợp chuyển đổi trong python và nếu điều kiện không phù hợp nó sẽ trở lại mặc định nếu điều kiện không phù hợp với

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