Saya selalu memikirkan if not x is None
versi yang lebih jelas, tetapi panduan gaya Google dan PEP-8 keduanya digunakan if x is not None
. Apakah ada perbedaan kinerja kecil (saya berasumsi tidak), dan adakah kasus di mana yang satu benar-benar tidak cocok (menjadikan yang lain pemenang yang jelas untuk konvensi saya)? *
* Saya merujuk pada singleton mana pun, bukan hanya None
.
... untuk membandingkan lajang seperti Tidak Ada. Gunakan atau tidak.
python
coding-style
boolean-expression
orokusaki
sumber
sumber
is not
adalah operator di dalamnya sendiri. Seperti!=
. Jika Anda sukanot x is None
maka Anda juga harus memilihnot a == b
lebiha != b
.not x is None
(jawaban di sini meyakinkan saya) - namun, perlu dicatat bahwa itunot a == b
adalah gaya yang disukai dalam Python, dibandingkan dengana != b
.not a == b
benar-benar gaya yang disukai? Saya belum pernah melihatnya seperti itu dan di mana-mana saya melihat orang-orang menggunakannya!=
.!=
bukan dua operatornot
,==
.Jawaban:
Tidak ada perbedaan kinerja, karena mereka mengkompilasi ke bytecode yang sama:
Secara gaya, saya mencoba menghindari
not x is y
. Meskipun kompiler akan selalu memperlakukannya sebagainot (x is y)
, pembaca manusia mungkin salah memahami konstruk sebagai(not x) is y
. Jika saya menulisx is not y
maka tidak ada ambiguitas.sumber
x is (not y)
. Tapi saya cenderung setuju dengan Anda untuk alasan Anda yang lain.Panduan gaya Google dan Python adalah praktik terbaik:
Penggunaan
not x
dapat menyebabkan hasil yang tidak diinginkan.Lihat di bawah:
Anda mungkin tertarik untuk melihat literal apa yang dievaluasi
True
atauFalse
dengan Python:Edit untuk komentar di bawah ini:
Saya hanya melakukan beberapa pengujian lagi.
not x is None
tidak meniadakanx
terlebih dahulu dan kemudian dibandingkan denganNone
. Bahkan, tampaknyais
operator memiliki prioritas lebih tinggi ketika digunakan seperti itu:Karena itu,
not x is None
adil, menurut pendapat jujur saya, sebaiknya dihindari.Lebih banyak edit:
Saya hanya melakukan lebih banyak pengujian dan dapat mengonfirmasi bahwa komentar bukzor benar. (Setidaknya, saya tidak bisa membuktikannya sebaliknya.)
Ini berarti
if x is not None
memiliki hasil yang tepat sebagaiif not x is None
. Saya berdiri dikoreksi. Terima kasih bukzor.Namun, jawaban saya tetap: Gunakan yang konvensional
if x is not None
.:]
sumber
Kode harus ditulis agar dapat dimengerti oleh programmer terlebih dahulu, dan compiler atau interpreter kedua. Konstruk "tidak" menyerupai bahasa Inggris lebih dekat daripada "tidak".
sumber
TLDR: Compiler bytecode mem-parsing mereka berdua
x is not None
- jadi demi keterbacaan, gunakanif x is not None
.Keterbacaan
Kami menggunakan Python karena kami menghargai hal-hal seperti keterbacaan manusia, kemampuan penggunaan, dan kebenaran berbagai paradigma pemrograman dibandingkan kinerja.
Python mengoptimalkan keterbacaan, terutama dalam konteks ini.
Parsing dan Kompilasi Bytecode
The
not
mengikat lebih lemah dariis
, sehingga tidak ada perbedaan logis di sini. Lihat dokumentasi :Secara
is not
khusus disediakan dalam tata bahasa Python sebagai peningkatan keterbacaan untuk bahasa:Dan itu juga merupakan elemen kesatuan dari tata bahasa juga.
Tentu saja, tidak diuraikan sama:
Tetapi kemudian byte compiler akan menerjemahkan
not ... is
keis not
:Jadi demi keterbacaan dan penggunaan bahasa seperti yang dimaksudkan, silakan gunakan
is not
.Untuk tidak menggunakannya itu tidak bijaksana.
sumber
not
Ikatan lebih lemah daripadais
, jadi tidak ada perbedaan logis di sini" - kecuali bahwa Python tidak harus menegakkan identitas logis dan aljabar untuk dipegang (tidak ada alasan intrinsik untuk(1 + 2)*3
mengevaluasi sama seperti1*3 + 2*3
). Di sini rupanya Python curang dan mengoptimalkanUNARY_NOT
.Jawabannya lebih sederhana daripada orang membuatnya.
Tidak ada keuntungan teknis, dan "x bukan y" adalah apa yang digunakan semua orang , yang membuatnya menjadi pemenang yang jelas. Tidak masalah bahwa itu "lebih mirip bahasa Inggris" atau tidak; semua orang menggunakannya, yang berarti setiap pengguna Python - bahkan pengguna Cina, yang bahasa Python-nya tidak mirip - akan memahaminya sekilas, di mana sintaksis yang sedikit kurang umum akan membutuhkan beberapa siklus otak ekstra untuk diuraikan.
Jangan berbeda hanya demi menjadi berbeda, setidaknya di bidang ini.
sumber
The
is not
Operator lebih disukai daripada meniadakan hasilis
untuk alasan gaya. "if x is not None:
" berbunyi seperti bahasa Inggris, tetapi "if not x is None:
" memerlukan pemahaman tentang prioritas operator dan tidak "" dibaca seperti bahasa Inggris.Jika ada perbedaan kinerja uang saya aktif
is not
, tetapi ini hampir pasti bukan motivasi untuk keputusan untuk memilih teknik itu. Jelas akan tergantung pada implementasi. Karenais
tidak dapat ditiadakan, seharusnya mudah untuk mengoptimalkan perbedaan apa pun.sumber
Secara pribadi, saya menggunakan
yang dipahami segera tanpa ambiguitas oleh setiap programmer, bahkan mereka yang tidak ahli dalam sintaksis Python.
sumber
if not x is None
lebih mirip dengan bahasa pemrograman lain, tetapiif x is not None
jelas terdengar lebih jelas (dan lebih tepat secara gramatikal dalam bahasa Inggris) bagi saya.Yang mengatakan sepertinya itu lebih merupakan hal preferensi bagiku.
sumber
Saya lebih suka bentuk yang lebih mudah dibaca
x is not y
daripada yang saya pikirkan bagaimana akhirnya menulis kode penanganan prioritas operator untuk menghasilkan kode yang lebih mudah dibaca.sumber