Skip to content

[Python] isinstance() 的使用方法

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() 來確認 ...... 在今天拜讀過大神的文章、並且自己動手測試之後,我越來越了解到自己不了解的事情還非常多,要持之以恆地學習。


References

Tags:

Leave a Reply