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.not x in xs
adalahnot (x in xs)
. Tetapi fakta bahwa itu diimplementasikan dengan menguraikannya menjadi bytecode yang persis sama seperti yang denganx not in xs
sangat jelas menunjukkan bahwa mereka harus selalu identik, sebagai lawan dari hal-hal sepertinot x == y
vsx != y
yang seharusnya memberikan hasil yang sama, tetapi tidak harus (tergantung pada implementasi dari__eq__
dan__ne__
terlibat).not in
lebih disukai karena lebih jelas dan mereka menambahkan kasus khusus untuk itu.sumber
Mereka identik artinya, tetapi pemeriksa panduan gaya Python pycodestyle (sebelumnya disebut pep8) lebih memilih
not in
operator dalam aturan E713 :Lihat juga "Python
if x is not None
orif not x is None
?" untuk pilihan gaya yang sangat mirip.sumber
Yang lain telah memperjelas bahwa kedua pernyataan itu, turun ke tingkat yang sangat rendah, setara.
Namun, saya tidak berpikir ada orang yang cukup stres sehingga karena ini menyerahkan pilihan kepada Anda, Anda harus melakukannya
pilih formulir yang membuat kode Anda dapat dibaca semaksimal mungkin.
Dan belum tentu dapat dibaca oleh siapa pun , meskipun itu tentu saja merupakan tujuan yang bagus. Tidak, pastikan kode tersebut adalah sebagai dibaca mungkin untuk Anda , karena Anda adalah orang yang paling mungkin untuk kembali ke kode ini kemudian dan mencoba untuk membacanya.
sumber
Dengan Python, tidak ada perbedaan. Dan tidak ada preferensi.
sumber
Secara sintaksis mereka adalah pernyataan yang sama. Saya akan dengan cepat menyatakan bahwa
'ham' not in 'spam and eggs'
menyampaikan maksud yang lebih jelas, tetapi saya telah melihat kode dan skenario yangnot 'ham' in 'spam and eggs'
menyampaikan arti yang lebih jelas daripada yang lain.sumber