2013-03-03 90 views
1

我想檢查變量的類型是否是Python中的特定類型。例如,我想檢查var x是否爲int。檢查變量的類型是否是Python中的特定類型

>>x=10 
>>type(x) 
<type 'int'> 

但是我怎樣才能比較它們的類型。我試過這個,但它似乎沒有工作。

if type(10)== "<type 'int'>": 
    print 'yes' 

我該怎麼做?

+4

值得注意的是,顯式檢查和分支變量類型被廣泛認爲是非pythonic,因爲它直接違反了鴨子打字:http:// en .wikipedia.org/wiki/Duck_typing – NPE 2013-03-03 15:19:31

回答

4

使用isinstance() function以測試特定類型:

isinstance(x, int) 

isinstance()它可以是一個單一類型或類型的元組,以測試針對:

isinstance(x, (float, complex, int)) 

將測試進行了一系列的例如,不同的數字類型。

+1

值得注意的是,您也可以使用元組而不是類型,然後如果變量是元組中給出的任何類型,則它將返回True,例如:'isinstance(x ,(int,float,decimal))'如果'x'是一個int,或者一個浮點數或者一個小數,'會返回True。 – 2013-03-03 15:09:26

+0

@InbarRose:確實;我總是用'complex'作爲那個例子。 :-) – 2013-03-03 15:11:56

3

你舉的例子可以寫成:

if type(10) is int: # "==" instead of "is" would also work. 
    print 'yes' 

但是請注意,這可能不完全是你想要什麼,例如,如果你寫10L或數大於sys.maxint,而不是僅僅10,這將不打印是,因爲long(這將是這樣一個數字的類型)不是int

另一種方式是,如馬亭已經建議,使用isinstance()內建函數如下:

if isinstance(type(10), int): 
    print 'yes' 

insinstance(instance, Type)回報True不僅當type(instance) is Type而且如果實例的類型是從Type的。因此,由於boolint的子類,因此這也適用於TrueFalse

但通常最好不要檢查特定類型,而是爲了檢查功能,您需要。也就是說,如果你的代碼不能處理這個類型,它會在嘗試對這個類型執行一個不支持的操作時自動拋出一個異常。

但是,如果您需要處理整數和浮點數不同,你可能要檢查isinstance(var, numbers.Integral)(需要import numbers)的演算值爲True如果varint類型,longbool或者是從這個類派生的任何用戶定義類型的。請參閱the standard type hierarchy和[numbers模塊]上的Python文檔

相關問題