python骚操作之——判断整数
Alex ☆ 想要改變世界的007程序員
在很多場景下都需要用到判斷一個數(shù)是否為整數(shù)的需求,正好今天遇到了,在這里總結(jié)一下,以后可以繼續(xù)補(bǔ)充。
1.type判斷是否為整型
type() 函數(shù)如果你只有第一個參數(shù)則返回對象的類型,三個參數(shù)返回新的類型對象。
type() 方法的語法:
type(object) type(name, bases, dict)- name – 類的名稱。
- bases – 基類的元組。
- dict – 字典,類內(nèi)定義的命名空間變量。
所以用type判斷整數(shù)就很方便:
>>> type(1) == int True >>> type(1.0) == int False >>> type(1.0) <class 'float'>2.isinstance判斷是否為整型
Python中isinstance() 函數(shù)來判斷一個對象是否是一個已知的類型,類似 type()。
isinstance() 方法的語法:isinstance(object, classinfo)
>>>a = 2 >>> isinstance (a,int) True >>> isinstance (a,str) False >>> isinstance (a,(str,int,list)) # 是元組中的一個返回 True Trueisinstance() 與 type() 區(qū)別:
- type() 不會認(rèn)為子類是一種父類類型,不考慮繼承關(guān)系。
- isinstance() 會認(rèn)為子類是一種父類類型,考慮繼承關(guān)系。
如果要判斷兩個類型是否相同推薦使用 isinstance()。
class A:passclass B(A):passisinstance(A(), A) # returns True type(A()) == A # returns True isinstance(B(), A) # returns True type(B()) == A # returns False用isinstance()判斷整數(shù)跟type類似:
>>> isinstance(1, int) True >>> isinstance(1.0, int) False >>> isinstance(1.0, float) True3.%判斷是否為整型
有的時候針對1.0這樣的數(shù)據(jù),其實也是int,但是在Python中卻會被認(rèn)為是float,對于一個不管是不是整型的數(shù)想要判斷它是不是整數(shù),可以借助%操作來實現(xiàn)。
>>> 1 % 1 0 >>> 1.0 % 1 0.0 >>> 1.1 % 1 0.10000000000000009 >>> 1.5 % 1 0.5可以發(fā)現(xiàn),一個整數(shù)不管是int類型還是float類型,對1取余都是0,所以可以根據(jù)這個特性來判斷一個數(shù)是不是整數(shù)。
1.1 % 1 = 0.10000000000000009 是怎么回事?
其實類似的還有0.1 + 0.2 = 0.30000000000000004,其原因在于十進(jìn)制和二進(jìn)制的轉(zhuǎn)換上,計算機(jī)先要把十進(jìn)制的數(shù)轉(zhuǎn)化為二進(jìn)制,然后再計算。
但是,在轉(zhuǎn)化中,浮點數(shù)轉(zhuǎn)化為二進(jìn)制,就出問題了,例如:十進(jìn)制的 0.1,轉(zhuǎn)化為二進(jìn)制是:0.0001100110011001100110011001100110011001100110011…
也就是說,轉(zhuǎn)化為二進(jìn)制后,不會精確等于十進(jìn)制的 0.1,同時,計算機(jī)存儲的位數(shù)是有限制的,所以,就出現(xiàn)上述現(xiàn)象了。
總結(jié)
以上是生活随笔為你收集整理的python骚操作之——判断整数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 选择最好用的PyCharm IDE
- 下一篇: Python将秒转换为 时分秒 的格式