พวกเขามักจะให้ผลลัพธ์เดียวกัน
ในความเป็นจริงnot 'ham' in 'spam and eggs'
ดูเหมือนว่าจะมีการบรรจุแบบพิเศษเพื่อดำเนินการ "ไม่อยู่ใน" รายการเดียวแทนที่จะเป็นการดำเนินการ "ใน" จากนั้นจึงปฏิเสธผลลัพธ์:
>>> import dis
>>> def notin():
'ham' not in 'spam and eggs'
>>> dis.dis(notin)
2 0 LOAD_CONST 1 ('ham')
3 LOAD_CONST 2 ('spam and eggs')
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> def not_in():
not 'ham' in 'spam and eggs'
>>> dis.dis(not_in)
2 0 LOAD_CONST 1 ('ham')
3 LOAD_CONST 2 ('spam and eggs')
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> def not__in():
not ('ham' in 'spam and eggs')
>>> dis.dis(not__in)
2 0 LOAD_CONST 1 ('ham')
3 LOAD_CONST 2 ('spam and eggs')
6 COMPARE_OP 7 (not in)
9 POP_TOP
10 LOAD_CONST 0 (None)
13 RETURN_VALUE
>>> def noteq():
not 'ham' == 'spam and eggs'
>>> dis.dis(noteq)
2 0 LOAD_CONST 1 ('ham')
3 LOAD_CONST 2 ('spam and eggs')
6 COMPARE_OP 2 (==)
9 UNARY_NOT
10 POP_TOP
11 LOAD_CONST 0 (None)
14 RETURN_VALUE
ในตอนแรกฉันคิดว่าพวกเขาให้ผลลัพธ์เดียวกันเสมอ แต่not
ด้วยตัวมันเองนั้นเป็นเพียงตัวดำเนินการเชิงตรรกะที่มีลำดับความสำคัญต่ำซึ่งสามารถนำไปใช้กับa in b
นิพจน์บูลีนอื่น ๆ ได้อย่างง่ายดายในขณะที่not in
ตัวดำเนินการแยกต่างหากเพื่อความสะดวกและชัดเจน .
การถอดชิ้นส่วนด้านบนเผยให้เห็น! ดูเหมือนว่าในขณะที่not
เห็นได้ชัดว่าเป็นตัวดำเนินการลบเชิงตรรกะ แต่แบบฟอร์มnot a in b
นี้มีการบรรจุแบบพิเศษเพื่อไม่ให้ใช้ตัวดำเนินการทั่วไป สิ่งนี้ทำให้not a in b
เป็นนิพจน์เดียวกันอย่างแท้จริงa not in b
แทนที่จะเป็นเพียงนิพจน์ที่ให้ผลลัพธ์เป็นค่าเดียวกัน
not x in xs
ในเอกสาร