當前位置:成語大全網 - 書法字典 - Python中類型判斷為什麽推薦isinstance?

Python中類型判斷為什麽推薦isinstance?

Python在定義變量時不需要指定具體的類型。解釋器將在運行時自動檢查變量的類型,並根據需要執行隱式類型轉換。因為Python是壹種動態語言,所以壹般不建議進行類型轉換。比如“+”運算,如果加號兩邊都有數據,就進行加法運算,如果兩邊都有字符串,就進行字符串連接運算,如果兩邊都有列表,就進行組合運算,甚至可以進行復數運算。解釋器會根據兩邊變量的類型在運行時調用不同的內部方法。當加號兩邊的變量類型不同時無法轉換時,會拋出TypeError異常。

但是在實際開發中,為了提高代碼的健壯性,我們還是需要檢查類型。類型檢查首先想到的就是使用type(),比如用type判斷壹個int類型。

如果類型(1)是類型,則導入類型。Integer: print ('1是int類型')else: print('1不是int類型')。

上面的程序會輸出:1是壹個int類型。

我們可以在類型中找到壹些常用的類型,結果如2.7.6所示:

類型。BooleanType # bool類型類型。buffertype # buffertype。builtinfunctiontype #內置函數,例如len()類型。BuiltinMethodType #內置方法,指的是方法類型。ClassType #類類型。CodeType #代碼塊類型。復雜類型類型。字典代理類型類型。字典類型類型。字典類型#字典替代類型。ellipsistypetypes.filetype #文件類型類型。FloatType #浮動類型類型。frametypetypes.functiontype #函數類型類型。生成器類型

類型。getsetdescriptotypetypes . instance type # instance types . int type # int type types . Lambda type # Lambda type types . list type # list type types . long type # long type types . memberdescriptotypetype . Method type #方法類型。moduletype # moduletypes。nonetype # none類型類型。notimplementedtypes。objecttype #對象類型類型. slicetypetypes.stringtype #字符串類型。字符串類型

類型。TracebackType

類型。TupleType #元組類型類型。typetype # type本身的類型。unboundemethodtypes.unicode類型

類型。XRangeType

在Python 3中,類型已經大大減少了。

類型。BuiltinFunctionType

類型。BuiltinMethodType

類型。代碼類型

類型。DynamicClassAttribute

類型。框架類型

類型。函數類型

類型。生成器類型

類型。GetSetDescriptorType

類型。LambdaType

類型。MappingProxyType

類型。MemberDescriptorType

類型。方法類型

類型。模塊類型

類型。簡單命名空間

類型。TracebackType

types.new _ class

types.prepare_class

但是,我們不建議使用type進行類型檢查。之所以列出這些類型,也是為了擴大知識面。那為什麽不推薦使用type進行類型檢查呢?讓我們看看下面的例子。

import typesclass UserInt(int):def _ _ init _ _(self,val = 0):self . val = int(val)I = 1n = UserInt(2)print(type(I)是type(n))

上面的代碼輸出:False

這說明I和N的類型是不壹樣的。實際上UserInt是繼承自Int的,所以這個判斷是有問題的。當我們擴展Python內置類型時,type返回的結果不夠準確。讓我們看另壹個例子。

class A():pass class B():passa = A()B = B()print(類型(A)是類型(B))

代碼輸出結果:True

類型比較a和b的結果是同壹類型,結果明顯不準確。這個古典類的例子,type返回的結果是壹樣的,這樣的結果不是我們想要的。對於內置的基本類型,用tpye檢查是沒問題的,但是應用到其他場合,類型就不靠譜了。這時,我們需要使用isinstance進行類型檢查。

isinstance(object,classinfo)

對象表示壹個實例,classinfo可以是直接或間接的類名、基本類型或由它們組成的元組。

& gt& gt& gtisinstance(2,浮點型)

錯誤的

& gt& gt& gtisinstance('a ',(str,unicode))

真實的

& gt& gt& gtisinstance((2,3),(str,list,tuple))

真實的