我想檢查變量的類型是否是Python中的特定類型。例如,我想檢查var x
是否爲int。檢查變量的類型是否是Python中的特定類型
>>x=10
>>type(x)
<type 'int'>
但是我怎樣才能比較它們的類型。我試過這個,但它似乎沒有工作。
if type(10)== "<type 'int'>":
print 'yes'
我該怎麼做?
我想檢查變量的類型是否是Python中的特定類型。例如,我想檢查var x
是否爲int。檢查變量的類型是否是Python中的特定類型
>>x=10
>>type(x)
<type 'int'>
但是我怎樣才能比較它們的類型。我試過這個,但它似乎沒有工作。
if type(10)== "<type 'int'>":
print 'yes'
我該怎麼做?
使用isinstance()
function以測試特定類型:
isinstance(x, int)
isinstance()
它可以是一個單一類型或類型的元組,以測試針對:
isinstance(x, (float, complex, int))
將測試進行了一系列的例如,不同的數字類型。
值得注意的是,您也可以使用元組而不是類型,然後如果變量是元組中給出的任何類型,則它將返回True,例如:'isinstance(x ,(int,float,decimal))'如果'x'是一個int,或者一個浮點數或者一個小數,'會返回True。 – 2013-03-03 15:09:26
@InbarRose:確實;我總是用'complex'作爲那個例子。 :-) – 2013-03-03 15:11:56
你舉的例子可以寫成:
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
的。因此,由於bool
是int
的子類,因此這也適用於True
和False
。
但通常最好不要檢查特定類型,而是爲了檢查功能,您需要。也就是說,如果你的代碼不能處理這個類型,它會在嘗試對這個類型執行一個不支持的操作時自動拋出一個異常。
但是,如果您需要處理整數和浮點數不同,你可能要檢查isinstance(var, numbers.Integral)
(需要import numbers
)的演算值爲True
如果var
是int
類型,long
,bool
或者是從這個類派生的任何用戶定義類型的。請參閱the standard type hierarchy和[numbers
模塊]上的Python文檔
值得注意的是,顯式檢查和分支變量類型被廣泛認爲是非pythonic,因爲它直接違反了鴨子打字:http:// en .wikipedia.org/wiki/Duck_typing – NPE 2013-03-03 15:19:31