Python數據類型判斷存在問題總結
今天扣丁學堂小編給大家介紹一下關于python視頻教程之判斷變量數據類型時,建議使用isinstance()方法代替type().進行類型檢查首先想到的就是用type(),但是Type在某些特定情況下判斷類型存在問題,今天就來說下type在python類型判斷時的坑。
type()方法
例子:int類型判斷
>>>importtypes
>>>type(2017)==types.IntType
True
Python2.7中的types類型:
types.BooleanType#bool類型
types.BufferType#buffer類型
types.BuiltinFunctionType#內建函數,比如len()
types.BuiltinMethodType#內建方法,指的是類中的方法
types.ClassType#類類型
types.CodeType#代碼塊類型
types.ComplexType#復數類型
types.DictProxyType#字典代理類型
types.DictType#字典類型
types.DictionaryType#字典備用的類型
types.EllipsisType
types.FileType#文件類型
types.FloatType#浮點類型
types.FrameType
types.FunctionType#函數類型
types.GeneratorType
types.GetSetDescriptorType
types.InstanceType#實例類型
types.IntType#int類型
types.LambdaType#lambda類型
types.ListType#列表類型
types.LongType#long類型
types.MemberDescriptorType
types.MethodType#方法類型
types.ModuleType#module類型
types.NoneType#None類型
types.NotImplementedType
types.ObjectType#object類型
types.SliceTypeh
types.StringType#字符串類型
types.StringTypes
types.TracebackType
types.TupleType#元組類型
types.TypeType#類型本身
types.UnboundMethodType
types.UnicodeType
types.XRangeType
Python3.x中的types類型:
types.BuiltinFunctionType
types.BuiltinMethodType
types.CodeType
types.DynamicClassAttribute
types.FrameType
types.FunctionType
types.GeneratorType
types.GetSetDescriptorType
types.LambdaType
types.MappingProxyType
types.MemberDescriptorType
types.MethodType
types.ModuleType
types.SimpleNamespace
types.TracebackType
types.new_class
types.prepare_class
Python3.x進行了類型的精簡
isinstance方法
isinstance(object,classinfo)object表示實例,classinfo可以是直接或間接類名、基本類型或者有它們組成的元組。
>>>isinstance(1,int)
True
>>>
>>>isinstance('pythontab.com',(str,int))#是其中一種即可
True
>>>isinstance(100,(str,int))#是其中一種即可
True
上面type的例子可以表示為:
>>>importtypes
>>>isinstance(2017,int)
True
那為什么不推薦使用type進行類型檢查呢?我們來看一下下面的例子。
importtypes
classUserInt(int):
def__init__(self,val=0):
self.val=int(val)
i=1
n=UserInt(2)
print(type(i)istype(n))
上面的代碼輸出:False
這就說明i和n的類型是不一樣的,而實際上UserInt是繼承自int的,所以這個判斷是存在問題的,當我們對Python內建類型進行擴展的時候,type返回的結果就不夠準確了。我們再看一個例子。
classca:
pass
classcb:
pass
a=ca()
b=cb()
print(type(a)istype(b))
代碼的輸出結果:True
注意:這個例子僅僅針對Python2.x版本,Python3.x版本中會返回Flase,不存在該問題
type比較的結果a和b的類型是一樣的,結果明顯是不準確的。在old-styleclass中,任意instance的type都是'instance'。所以絕對不能用type來判斷其類型。
另外這個問題又與Python的思想有關,正常情況下不應該編寫代碼檢查類型的,而應該直接假設被操作的instance具有你希望的屬性,否則拋出異常。即使需要檢查類型,也應該用isinstance來判斷,這樣你期望類型的subclass也能正常被處理(比如,一個函數需要處理Message類型,那么它應該也能處理Message的子類型MyMessage,所以應該使用isinstance(arg,Message)這樣來判斷而不是type(arg)==Message來判斷)
小編提醒:盡量不要使用type()方法,多使用isinstance(),這樣可以減少錯誤,最后想要學習Python培訓課程的小伙伴快選擇扣丁學堂學習吧,扣丁學堂不僅有專業的老師還有與時俱進的課程體系和大量的Python視頻供學員觀看學習哦。
*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。
LCD顯示屏相關文章:lcd顯示屏原理
lcd相關文章:lcd原理