Tidak jelas apakah pertanyaan ini tentang isvs ==, atau tentang sifat dari apa sebenarnya Nonedan bagaimana perilaku berbeda dalam kedua konteks (yang terakhir adalah mengapa saya berakhir di sini). Berdasarkan ketidakjelasan dan kurangnya tanggapan OP ... Saya terkejut ini memiliki begitu banyak upvotes. Maksud saya ... cmon ... pertanyaannya bahkan tidak ditulis dalam pertanyaan yang sebenarnya ...
Kelas bebas menerapkan perbandingan dengan cara apa pun yang dipilihnya, dan dapat memilih untuk membuat perbandingan terhadap Tidak ada yang berarti (yang benar-benar masuk akal; jika seseorang mengatakan kepada Anda untuk mengimplementasikan objek Tidak Ada dari awal, bagaimana lagi Anda mendapatkannya untuk membandingkan True melawan dirinya sendiri?).
Secara praktis, tidak ada banyak perbedaan karena operator pembanding khusus jarang. Tetapi Anda harus menggunakan is Nonesebagai aturan umum.
@ myusuf3 Anda tidak benar-benar membutuhkan bukti untuk itu. ispada dasarnya adalah perbandingan integer sementara ==tidak hanya menyelesaikan referensi tetapi membandingkan nilai yang mungkin memiliki tipe yang tidak cocok.
Pijusn
4
Satu yang mendukung "adalah". Ketika suatu variabel bisa berupa Tidak Ada atau sesuatu yang tidak memiliki perbandingan bermakna dengan Tidak ada. Sebagai contoh, sebuah variabel dapat berupa numpy.array atau None (case khusus saya).
Jblasco
3
Saya ingin menambahkan apa yang dikatakan @TimLudwinski: pertama, jika seseorang memilih untuk mengesampingkan operator kesetaraan untuk menjadikan None sebagai kasus khusus, mengapa kami ingin memberi tahu mereka sebaliknya? Kedua, "Seharusnya ada satu - dan lebih disukai hanya satu - cara yang jelas untuk melakukannya." Dan cara yang jelas untuk memeriksa apakah sesuatu sama dengan sesuatu adalah, yah, operator kesetaraan.
Jawaban ini tidak benar, seperti yang dijelaskan dalam jawaban Ben Hoffstein di bawah ini stackoverflow.com/questions/3257919/is-none-vs-none/… . x == Nonedapat mengevaluasi Truebahkan jika xtidak Nonetetapi sebuah instance dari beberapa kelas dengan operator kesetaraan kustom sendiri.
maks
5
Jika Anda menggunakan numpy,
if np.zeros(3)==None:pass
akan memberi Anda kesalahan ketika numpy melakukan perbandingan elemen
Itu tergantung pada apa yang Anda bandingkan dengan Tidak ada. Beberapa kelas memiliki metode perbandingan khusus yang memperlakukan == Noneberbeda is None.
Khususnya keluaran a == Nonebahkan tidak harus boolean !! - Penyebab bug yang sering terjadi.
Untuk contoh spesifik, ambil array numpy tempat ==perbandingan diterapkan elementwise:
import numpy as np
a = np.zeros(3)# now a is array([0., 0., 0.])
a ==None#compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a isNone#compares object to object, outputs False
==
danis
dalam python?is
vs==
, atau tentang sifat dari apa sebenarnyaNone
dan bagaimana perilaku berbeda dalam kedua konteks (yang terakhir adalah mengapa saya berakhir di sini). Berdasarkan ketidakjelasan dan kurangnya tanggapan OP ... Saya terkejut ini memiliki begitu banyak upvotes. Maksud saya ... cmon ... pertanyaannya bahkan tidak ditulis dalam pertanyaan yang sebenarnya ...Jawaban:
Jawabannya dijelaskan di sini .
Kutipan:
Secara praktis, tidak ada banyak perbedaan karena operator pembanding khusus jarang. Tetapi Anda harus menggunakan
is None
sebagai aturan umum.sumber
is None
sedikit (~ 50%) lebih cepat daripada== None
:)is
pada dasarnya adalah perbandingan integer sementara==
tidak hanya menyelesaikan referensi tetapi membandingkan nilai yang mungkin memiliki tipe yang tidak cocok.sumber
Dalam hal ini, mereka sama.
None
adalah objek tunggal (hanya ada satuNone
).is
memeriksa untuk melihat apakah objek tersebut adalah objek yang sama, sementara == hanya memeriksa apakah mereka setara.Sebagai contoh:
Tetapi karena hanya ada satu
None
, mereka akan selalu sama, danis
akan mengembalikan Benar.sumber
x == None
dapat mengevaluasiTrue
bahkan jikax
tidakNone
tetapi sebuah instance dari beberapa kelas dengan operator kesetaraan kustom sendiri.Jika Anda menggunakan numpy,
akan memberi Anda kesalahan ketika numpy melakukan perbandingan elemen
sumber
Itu tergantung pada apa yang Anda bandingkan dengan Tidak ada. Beberapa kelas memiliki metode perbandingan khusus yang memperlakukan
== None
berbedais None
.Khususnya keluaran
a == None
bahkan tidak harus boolean !! - Penyebab bug yang sering terjadi.Untuk contoh spesifik, ambil array numpy tempat
==
perbandingan diterapkan elementwise:sumber