Bạn đang bị nhầm lẫn bởi hành vi của toán tử or
; nó trả về biểu thức đầu tiên chỉ khi đó là giá trị đúng; không 0
cũng không False
là đúng vì vậy giá trị thứ hai được trả về:
>>> 0 or 'bar'
'bar'
>>> False or 'foo'
'foo'
Bất kỳ giá trị mà không phải là số 0, container rỗng, None
hoặc False
được coi là đúng (lớp tùy chỉnh có thể thay đổi bằng cách thực hiện một phương pháp __bool__
(python 3), __nonzero__
(python 2) hoặc __len__
(chiều dài 0 là trống)
biểu thức thứ hai thậm chí còn không được đánh giá nếu là người đầu tiên là True
:.
>>> True or 1/0
True
Biểu thức 1/0
sẽ tăng một ngoại lệ ZeroDivision
, nhưng thậm chí không được Python đánh giá.
này được diễn tả trong boolean operators documentation:
Khái niệm x or y
đầu tiên đánh giá x
; nếu x
là đúng, giá trị của nó được trả về; nếu không, y
được đánh giá và giá trị kết quả được trả về.
Tương tự, and
trả về biểu thức đầu tiên nếu là False
, nếu không biểu thức thứ hai được trả về.
Nguồn
2013-11-04 22:18:29
Lưu ý rằng cả hai giá trị này đều "sai"; nghĩa là, cả hai đều đánh giá thành 'False' trong câu lệnh if. –