Python在定義變量的時候不用指明具體的的類型元咙,解釋器會在運(yùn)行的時候會自動檢查 變量的類型合搅,并根據(jù)需要進(jìn)行隱式的類型轉(zhuǎn)化浆西。因?yàn)镻ython是動態(tài)語言,所以一般情 況下是不推薦進(jìn)行類型轉(zhuǎn)化的绷旗。比如"+"操作時喜鼓,如果加號兩邊是數(shù)據(jù)就進(jìn)行加法操 作,如果兩邊是字符串就進(jìn)行字符串連接操作刁标,如果兩邊是列表就進(jìn)行合并操作颠通,甚 至可以進(jìn)行復(fù)數(shù)的運(yùn)算。解釋器會在運(yùn)行時根據(jù)兩邊的變量的類型調(diào)用不同的內(nèi)部方法膀懈。 當(dāng)加號兩邊的變量類型不一樣的時候顿锰,又不能進(jìn)行類型轉(zhuǎn)化,就會拋出TypeError的異常启搂。
通常類型判斷可用兩種方法來進(jìn)行判斷:
- type()
- isinstance()
這兩種方法有什么區(qū)別硼控,用哪種比較好呢?
對于內(nèi)建的基本類型來說胳赌,使用tpye來檢查是沒有問題的牢撼, 可是當(dāng)應(yīng)用到其他場合的時候,type就顯得不可靠了疑苫。比如:當(dāng)我們對Python內(nèi)建類型進(jìn)行擴(kuò)展的時候熏版,type返回的結(jié)果就不夠準(zhǔn)確了。
這個時候我們就需要使用isinstance來進(jìn)行類型 檢查捍掺。
isinstance(object, classinfo)
object表示實(shí)例撼短,classinfo可以是直接或間接類名、基本類型或者有它們組成的元組挺勿。
>>> isinstance(2, float)
False
>>> isinstance('a', (str, unicode))
True
>>> isinstance((2, 3), (str, list, tuple))
True