Begini cara saya melakukannya:
inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
print "this number is an int"
else:
print "this number is a float"
Sesuatu seperti itu.
Apakah ada cara lain yang lebih baik untuk melakukan ini?
assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)
adalah apa yang saya cari ketika saya menemukan pertanyaan ini dengan Google.Jawaban:
Gunakan isinstance .
Begitu:
_EDIT: _
Seperti yang ditunjukkan, dalam kasus bilangan bulat panjang, hal di atas tidak akan berfungsi. Jadi yang perlu Anda lakukan:
sumber
issubclass
akan lebih generik?issubclass
akan menjadi kesalahan, karena bekerja di kelas.isinstance
memeriksa apakah objek yang diberikan adalah turunan dari kelas atau salah satu dari subclass kelas itu , jadi itu generik. Pemikiran yangisinstance(obj, cls)
setara denganissubclass(obj.__class__, cls)
x = 12L
. Saya tahu hanyaint
diminta, tetapi senang memperbaiki masalah lain sebelum terjadi. Mungkin yang paling umumisinstance(x, numbers.Integral)
.isinstance(x, (int, long))
.isinstance(True, int)
Saya paling suka @ ninjagecko menjawab.
Ini juga akan berfungsi:
ada juga tipe complex untuk bilangan kompleks
sumber
isinstance(False, (int, float)) = True
), saya butuhkannot isinstance(n, bool) and isinstance(n, (int, float))
bukanSatu-liner:
Ini menghindari beberapa masalah:
Demo:
sumber
isinstance(99**10,int)
adalahTrue
.Lebih mudah untuk meminta maaf daripada meminta izin. Cukup lakukan operasi. Jika berhasil, objek itu dari jenis yang dapat diterima, cocok, tepat. Jika operasi tidak berhasil, objek itu bukan tipe yang cocok. Mengetahui tipenya jarang membantu.
Cukup coba operasi dan lihat apakah itu berfungsi.
sumber
type
danisinstance
dapat melakukan pekerjaan itu?class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int
. (Maaf untuk sintaks yang buruk tetapi saya tidak dapat melakukan lebih dari satu baris.)int
danfloat
bahkan mungkin tidak relevan untuk banyak algoritma. Meminta jenis secara eksplisit biasanya merupakan tanda polimorfisme buruk atau masalah desain yang lebih serius. Pendeknya. Jangan Periksa Jenis. Lebih Mudah Meminta Pengampunan daripada Meminta Izin.Yang dapat Anda lakukan juga adalah menggunakan
type()
Contoh:sumber
Berikut adalah sepotong kode yang memeriksa apakah angka bilangan bulat atau tidak, ia berfungsi untuk Python 2 dan Python 3.
Perhatikan bahwa Python 2 memiliki kedua tipe
int
danlong
, sedangkan Python 3 hanya memiliki tipeint
. Sumber .Jika Anda ingin memeriksa apakah nomor Anda adalah
float
yang mewakiliint
, lakukan iniJika Anda tidak perlu membedakan antara int dan float, dan tidak apa-apa dengan baik, maka jawaban ninjagecko adalah cara untuk pergi
sumber
bagaimana dengan solusi ini?
sumber
Saya tahu ini adalah utas lama tetapi ini adalah sesuatu yang saya gunakan dan saya pikir itu mungkin membantu.
Ia bekerja di python 2.7 dan python 3 <.
sumber
Anda dapat menggunakan modulo untuk menentukan apakah x adalah bilangan bulat. The
isinstance(x, int)
Metode hanya menentukan jika x adalah bilangan bulat dengan jenis:sumber
3.2 % 2
hasil panen1.4
. Apa yang kau bicarakan, Willi? Selain itu, Anda akan mendapatkanTypeError
jika x bukan angka untuk memulai, sehingga program Anda akan keluar sebelum waktunya jika Anda mengikuti saran ini ...x%1 == 0
harus benar hanya untuk int (tetapi juga berlaku untuk float dengan titik desimal nol berikut). Jika Anda tahu itu akan menjadi int (misalnya, jika ini adalah param untuk suatu fungsi), maka Anda bisa memeriksa dengan modulo. Saya yakin itu lebih cepat dariMath.floor(x) == x
. Pada sisi yang tidak terlalu cerah, ini akan terjadiTrue
jika Anda melewati float like1.0
atau5.0
, dan Anda akan menghadapi masalah yang sama dengan menggunakan apa yang disebutkan oleh poster asli dalam pertanyaannya.Mencoba dalam Python versi 3.6.3 Shell
Tidak dapat menemukan sesuatu untuk bekerja.
sumber
tolong periksa ini: nomor impor
Meskipun X adalah float tetapi nilainya integer, jadi jika Anda ingin memeriksa nilainya integer Anda tidak dapat menggunakan isinstance dan Anda perlu membandingkan nilai bukan tipe.
sumber
sumber
Perbarui: Coba ini
sumber
Anda dapat melakukannya dengan pernyataan if if sederhana
Untuk memeriksa float
if type (a) == type (1.1)
Untuk memeriksa tipe integer
if type (a) == type (1)
sumber
sumber
Coba ini...
sumber
variable.isnumeric
memeriksa apakah suatu nilai adalah bilangan bulat:sumber