สิ่งที่คุณเห็นในทั้ง 3 อินสแตนซ์เป็นผลมาจากข้อกำหนดทางไวยากรณ์ของภาษาและวิธีการแยกวิเคราะห์โทเค็นที่พบในซอร์สโค้ดเพื่อสร้างแผนผังการแยกวิเคราะห์
การดูรหัสระดับต่ำนี้จะช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้นภายใต้ประทุน เราสามารถใช้คำสั่ง python เหล่านี้แปลงเป็นรหัสไบต์แล้วถอดรหัสโดยใช้dis
โมดูล:
กรณีที่ 1: (0, 0) == 0, 0
>>> dis.dis(compile("(0, 0) == 0, 0", '', 'exec'))
1 0 LOAD_CONST 2 ((0, 0))
3 LOAD_CONST 0 (0)
6 COMPARE_OP 2 (==)
9 LOAD_CONST 0 (0)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 1 (None)
19 RETURN_VALUE
(0, 0)
เป็นครั้งแรกที่เมื่อเทียบกับครั้งแรกและการประเมินเพื่อ0
False
สิ่งอันดับถูกสร้างแล้วกับผลนี้และที่ผ่านมาเพื่อให้คุณได้รับ0
(False, 0)
กรณีที่ 2: 0, 0 == (0, 0)
>>> dis.dis(compile("0, 0 == (0, 0)", '', 'exec'))
1 0 LOAD_CONST 0 (0)
3 LOAD_CONST 0 (0)
6 LOAD_CONST 2 ((0, 0))
9 COMPARE_OP 2 (==)
12 BUILD_TUPLE 2
15 POP_TOP
16 LOAD_CONST 1 (None)
19 RETURN_VALUE
ทูเพิลถูกสร้างขึ้นโดย0
เป็นองค์ประกอบแรก สำหรับองค์ประกอบที่สองการตรวจสอบจะทำแบบเดียวกันกับในกรณีแรกและประเมินผลเพื่อให้คุณได้รับFalse
(0, False)
กรณีที่ 3: (0, 0) == (0, 0)
>>> dis.dis(compile("(0, 0) == (0, 0)", '', 'exec'))
1 0 LOAD_CONST 2 ((0, 0))
3 LOAD_CONST 3 ((0, 0))
6 COMPARE_OP 2 (==)
9 POP_TOP
10 LOAD_CONST 1 (None)
13 RETURN_VALUE
ที่นี่เป็นที่คุณเห็นคุณเพียงแค่เปรียบเทียบทั้งสอง(0, 0)
tuples True
และกลับมา