>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False
Tại sao đầu ra tuyên bố print
thứ hai False
?Kết quả không mong đợi từ toán tử `in` - Python
>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False
Tại sao đầu ra tuyên bố print
thứ hai False
?Kết quả không mong đợi từ toán tử `in` - Python
in
và is
là các toán tử so sánh trong Python, tương tự như vậy, ví dụ: <
và ==
. Nói chung,
expr1 <comparison1> expr2 <comparison2> expr3
được coi là
(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3)
trừ expr2
đó được đánh giá chỉ một lần. Đó là lý do tại sao, ví dụ:
0 <= i < n
hoạt động như mong đợi. Tuy nhiên, nó áp dụng cho bất kỳ nhà khai thác so sánh chuỗi nào. Trong ví dụ của bạn,
item in seq is True
được coi là
(item in seq) and (seq is True)
Phần seq is True
là False, vì vậy toàn bộ biểu thức là False. Để có được những gì bạn có thể dự định, hãy sử dụng dấu ngoặc đơn để thay đổi nhóm:
print((item in seq) is True)
tuyên bố của bạn item in seq is True
được đánh giá là nội (item in seq) and (seq is True)
như hình dưới đây
>>>print ((item in seq) and (seq is True))
False
(seq là True) là False và do đó kết quả đầu ra tuyên bố của bạn False.
Không phải là giải thích đầy đủ trong @Tim Peters câu trả lời? –
@ t.m.adam - Cả hai chúng tôi đều trả lời nhiều hơn hoặc ít hơn cùng một lúc. Nếu câu trả lời của anh giải thích điều này một cách chi tiết hơn, hãy để tôi xóa câu trả lời này. – Beginner
@Beginner NO. Không thể có một câu hỏi có hai câu trả lời đúng? – void
Câu trả lời bên dưới không chính xác. Các bình luận giải thích nó một i xác nhận:
In [17]: item in (seq is True)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-4e7d6b2332d7> in <module>()
----> 1 item in (seq is True)
Lỗi Loại: đối số kiểu 'bool' không phải là iterable
câu trả lời trước Tôi tin rằng nó đang đánh giá seq is True
(mà đánh giá đến bool False
) , sau đó đánh giá item in False
(đánh giá là False
).
Có lẽ ý bạn là print (item in seq) is True
(đánh giá là True
)?
'mục trong False' tăng một' TypeError', vì giá trị bên phải phải là một iterable, mà 'False' là không. –
đã thay đổi câu trả lời. cảm ơn – travelingbones
Có thể là do cách python đánh giá một biểu thức. Bạn có thể muốn sử dụng 'in ((mục trong seq) là True)' –