เมื่อฉันดูคำตอบสำหรับคำถามนี้ฉันพบว่าฉันไม่เข้าใจคำตอบของฉันเอง
ฉันไม่เข้าใจจริงๆว่ามันถูกแยกวิเคราะห์อย่างไร เหตุใดตัวอย่างที่สองจึงส่งกลับค่าเท็จ
>>> 1 in [1,0] # This is expected
True
>>> 1 in [1,0] == True # This is strange
False
>>> (1 in [1,0]) == True # This is what I wanted it to be
True
>>> 1 in ([1,0] == True) # But it's not just a precedence issue!
# It did not raise an exception on the second example.
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
ขอบคุณสำหรับความช่วยเหลือ ฉันคิดว่าฉันต้องคิดถึงบางสิ่งที่ชัดเจนจริงๆ
ฉันคิดว่านี่จะแตกต่างอย่างละเอียดกับสำเนาที่ลิงก์:
ทำไมการแสดงออก 0 <0 == 0 คืนเท็จในหลาม? .
คำถามทั้งสองจะทำอย่างไรกับความเข้าใจของมนุษย์ในการแสดงออก ดูเหมือนจะมีสองวิธี (ในใจของฉัน) ในการประเมินการแสดงออก แน่นอนว่าไม่ถูกต้อง แต่ในตัวอย่างของฉันการตีความครั้งสุดท้ายเป็นไปไม่ได้
มองดู0 < 0 == 0
คุณสามารถจินตนาการว่าแต่ละครึ่งได้รับการประเมินและมีเหตุผลในการแสดงออก:
>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True
ดังนั้นลิงก์ตอบว่าทำไมสิ่งนี้ถึงประเมินFalse
:
>>> 0 < 0 == 0
False
แต่ด้วยตัวอย่างของฉัน1 in ([1,0] == True)
ไม่สมเหตุสมผลในการแสดงออกดังนั้นแทนที่จะมีการตีความที่เป็นไปได้สองแบบ (ยอมรับผิด) ดูเหมือนว่ามีเพียงสิ่งเดียวเท่านั้นที่เป็นไปได้:
>>> (1 in [1,0]) == True
==
ผูกแน่นกว่าin
เพื่อให้ได้รับการประเมินก่อนแล้วผลจากการที่ได้รับการเลี้ยง[1,0] == True
1 in other_result