他们总是给出相同的结果。
实际上,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
,而不仅仅是产生相同值的表达式。