Python作為一種解釋性語言,其強大的動態類型機制允許我們在運行時動態的改變變量的類型,這對程序員來說是非常方便的,但同時也帶來了類型安全的問題。如果程序員沒有很好的把握好變量的類型,可能會帶來類型錯誤的問題,而這可能會導致程序無法運行或產生錯誤的結果。而一些高級語言也提供了一些類型檢查的工具來幫助程序員儘可能地規避這些問題。Python中isinstance就是其中一種工具,下面我們將從多個方面來介紹isinstance函數的類型判斷作用。
一、基本使用方法
isinstance(obj,cls)函數是判斷obj是否是cls的實例對象的方法。其中,obj表示待判斷對象,cls表示待判斷的類名或類型的元組。如果obj是cls的實例,返回True,否則返回False。
class Person: pass class Student(Person): pass s1 = Student() print(isinstance(s1, Student)) # True print(isinstance(s1, Person)) # True print(isinstance(s1, str)) # False
通過上面的代碼,我們可以看到,s1既是Student的實例,也是Person的實例,同時也清楚的看到字符串不是它的實例。
二、類型檢查的嵌套調用
isinstance函數不僅支持單類型判斷,而且還支持對元組的類型檢查。
l = ["hello", "world"] print(isinstance(l, list)) # True print(isinstance(l, (list, tuple))) # True print(isinstance(l, (list, dict))) # True d = {"key": "value"} print(isinstance(d, dict)) # True print(isinstance(d, (list, dict))) # True print(isinstance(d, (list, tuple))) # False
通過上述例子,我們可以看到一個元素可以屬於一個基本類型,同時也可以被多種不同類型的元素包含,這也是isinstance相較與其它語言類型安全檢查的重要性。
三、一些特殊的類型判斷
isinstance函數不僅可以用於基本數據類型的判斷,還可以用於一些特殊數據類型的判斷。下面介紹幾個實際工作中常見的類型判斷。
1. 確定對象是否可以迭代
from collections.abc import Iterable s = 'hello world' print(isinstance(s, Iterable)) # True l = [1, 2, 3] print(isinstance(l, Iterable)) # True d = {"key": "value"} print(isinstance(d, Iterable)) # True i = 10 print(isinstance(i, Iterable)) # False num = (1, 2, 3) print(isinstance(num, Iterable)) # True
通過上述代碼,我們可以發現,字符串、列表、字典以及元組都是可以迭代的,但整數不可以被迭代。
2. 確定對象是否可以被調用
l = ["hello", "world"] def func(x): return x print(isinstance(l, Callable)) # False print(isinstance(func, Callable)) # True
通過上述代碼,我們可以發現,函數本身也是一種類型,稱為Callable。函數可以被調用,而列表不可以。
3. 判斷對象是否可以遍歷
from collections import Iterator s = 'hello world' print(isinstance(s, Iterator)) # False l = [1, 2, 3] print(isinstance(l, Iterator)) # True num = (1, 2, 3) print(isinstance(num, Iterator)) # True i = iter(num) print(isinstance(i, Iterator)) # True d = {"key": "value"} print(isinstance(d, Iterator)) # False
通過上述代碼,我們可以發現,除了字符串之外,其他的列表、元組和迭代器都是可以遍歷的。
總結
本文從基本使用方法、類型檢查的嵌套調用到一些特殊的類型判斷多個方面詳細介紹了Python內置函數isinstance的類型判斷作用。對於一個程序員來說,了解這些相關知識將會幫助我們在日常工作中更加高效地解決問題,減少包器的bug率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/207018.html