Hep aynı sonucu verirler.
Aslında, not 'ham' in 'spam and eggs'
"içeride" bir işlem yerine tek bir "içinde değil" işlemi gerçekleştiren ve ardından sonucu olumsuzlayan özel bir durum gibi görünüyor:
>>> 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
İlk başta hep aynı sonucu verdiklerini düşünmüştüm, ancak not
tek başına düşük öncelikli mantıksal bir olumsuzlama operatörü olduğunu ve a in b
diğer herhangi bir boole ifadesine olduğu kadar kolayca uygulanabilecekken , not in
kolaylık ve netlik için ayrı bir operatör olduğunu düşünmüştüm. .
Yukarıdaki demontaj açıklayıcıydı! Görünüşe göre not
mantıksal bir olumsuzlama operatörü olsa da, form not a in b
aslında genel operatörü kullanmaması için özel kasaya alınmıştır. Bu, yalnızca aynı değerle sonuçlanan bir ifade yerine , not a in b
kelimenin tam anlamıyla aynı ifadeyi yapar a not in b
.
not x in xs
Dokümanlarda sözünü bile bulamıyorum .