2012-12-10 44 views
28

Điều này có làm những gì tôi nghĩ không? Dường như với tôi rằng có. Tôi yêu cầu để chắc chắn.Kiểm tra tính bình đẳng của ba giá trị

if n[i] == n[i+1] == n[i+2]: 
    return True 

Bằng nhau?

if n[i] == n[i+1] and n[i+1] == n[i+2]: 
    return True 
+2

Điều đó là chính xác. –

+0

Bản sao của: http://stackoverflow.com/questions/13792604/usage-of-the-operator-for-three-objects/13792615#13792615 –

Trả lời

25

Đó là tương đương đến nhưng không bằng, vì truy cập chỉ được thực hiện một lần. Python chuỗi các toán tử quan hệ một cách tự nhiên (bao gồm inis).

Cách dễ nhất để thấy sự khác biệt nhỏ:

>>> print(1) == print(2) == print(3) 
1 
2 
3 
True 
>>> print(1) == print(2) and print(2) == print(3) 
1 
2 
2 
3 
True 
+3

Điều đáng chú ý là chúng không giống nhau, vì nó có thể cạnh tranh kịch bản mà một trong những công trình và khác không ('n' là một đối tượng thay đổi giá trị của' n [i + 1] 'sau khi truy cập). Chỉnh sửa: Tôi đã chỉnh sửa trong một ví dụ để hiển thị sự khác biệt. –

3

có bạn là đúng ....

bạn cũng có thể làm

5 > x > 1 

hoặc

1 < x < 5 
6

Có, tuy nhiên, khi so sánh ns bị xích biểu thức chung được đánh giá một lần, khi sử dụng and, nó được đánh giá hai lần. Trong cả hai trường hợp, so sánh thứ hai là không được đánh giá nếu là người đầu tiên là sai, ví dụ từ docs:

So sánh có thể được xích tùy tiện, ví dụ, x < y < = z tương đương để x < y và y < = z, ngoại trừ y được đánh giá chỉ một lần (nhưng trong cả hai trường hợp z không được đánh giá ở tất cả khi x < y được tìm thấy là sai).

2

Yep, tại internals của trăn trở về toán tử so sánh cũng không đúng không sai, họ thay vì trả lại 'so sánh kết quả' đối tượng (không thể nhớ tên lớp, nó đã được khá trong quá khứ), và đối tượng này cung cấp _ lt _, _ gt _, _ eq _ etc etc phương pháp và trở thành 'trách nhiệm' cho kết quả cuối cùng (và 'kết quả so sánh' được đúc là True hoặc False vào cuối tuyên bố). Đó là một phép thuật của python kiểm soát ngữ nghĩa cung cấp cho bạn :)

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