Last Updated on 2021-06-23 by Clay
在 Python 中,我們若是要判斷一個變數是否真的為某種特定的『資料型態』,比方說 int、float、bool、str、list ...... ,那麼,我們比較好的作法是使用 isinstance() 這個函式,而非使用 type() 來比較。
最重要的是 isinstance() 執行起來比較快,也適用於我們自己建構的 Class 物件繼承。 (type() 不考慮物件繼承,所以若是繼承類別的物件不會判斷與父類是相同類別)
以下就來紀錄 isinstance() 的使用方法。
isinstance() 的使用方法
使用方法其實非常簡單。
a = 123 print(isinstance(a, int)) print(isinstance(a, str)) print(isinstance(a, (int, str, float)))
Output:
True
False
True
簡單來講,第一個參數輸入的是我們要查詢的『變數』、第二個參數則是輸入我們要確認的『資料型態』。不過正如第三個例子所看到的,我們也可以輸入複數個『資料型態』來確認變數的型態是否有在其中。
至於為什麼在確認資料型態上使用 isinstance() 比 type() 好呢?以下我們來看段例子。
import time def type_test(): start_time = time.time() a = 123 b = 'test' c = list(b) print(type(a) == int) print(type(b) == int) print(type(c) == int) print('type time: {}'.format(time.time()-start_time)) print('='*70) def isinstance_test(): start_time = time.time() a = 123 b = 'test' c = list(b) print(isinstance(a, int)) print(isinstance(b, int)) print(isinstance(c, int)) print('isinstance time: {}'.format(time.time()-start_time)) print('='*70) if __name__ == '__main__': type_test() isinstance_test()
Output:
True
False
False
type time: 3.5762786865234375e-05
==============================================
True
False
False
isinstance time: 1.5020370483398438e-05
==============================================
我反覆跑過了數次,每一次 isinstance() 都比使用 type() 確認資料型態來得更快。
以前我在比較類型時總是使用 type() 來確認 ...... 在今天拜讀過大神的文章、並且自己動手測試之後,我越來越了解到自己不了解的事情還非常多,要持之以恆地學習。