Mereka selalu memberikan hasil yang sama.
Faktanya, not 'ham' in 'spam and eggs'
tampaknya kasus khusus untuk melakukan operasi "tidak dalam" tunggal, bukan operasi "dalam" dan kemudian meniadakan hasil:
>>> 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
Awalnya saya berpikir bahwa mereka selalu memberikan hasil yang sama, tetapi itu not
sendiri hanyalah operator negasi logis prioritas rendah, yang dapat diterapkan a in b
semudah ekspresi boolean lainnya, sedangkan not in
merupakan operator terpisah untuk kenyamanan dan kejelasan. .
Pembongkaran di atas mengungkapkan! Tampaknya meskipun not
jelas merupakan operator negasi logis, formulirnya not a in b
dikurung khusus sehingga tidak benar-benar menggunakan operator umum. Ini not a in b
secara harfiah membuat ekspresi yang sama a not in b
, bukan hanya ekspresi yang menghasilkan nilai yang sama.
not x in xs
di dokumen.