逻辑判断
常用的逻辑判断内置函数:
| 函数 | 说明 | 示例 |
|---|---|---|
all(iterable) | 所有元素为真返回 True,空序列返回 True | all([1, 2, 3]) → True |
any(iterable) | 任一元素为真返回 True,空序列返回 False | any([0, 1, 0]) → True |
callable(obj) | 对象是否可调用 | callable(print) → True |
isinstance(obj, class_or_tuple) | 是否为指定类(或其子类)的实例 | isinstance(1, int) → True |
issubclass(cls, class_or_tuple) | 是否为指定类的子类 | issubclass(bool, int) → True |
len(obj) | 返回长度(字符数 / 元素个数 / 键值对数) | len('abc') → 3 |
示例
print(all([1, 2, 3])) # True
print(all([1, 0, 3])) # False
print(any([0, '', None])) # False
print(any([0, 1])) # True
# 注意空序列的边界情况
print(all([]), any([])) # True False
print(callable(print)) # True
print(callable(42)) # False
print(isinstance(1, int)) # True
print(isinstance(True, int)) # True,bool 是 int 的子类
print(isinstance(1, (int, str))) # True,可传元组检查多个类型
print(issubclass(bool, int)) # True
print(len('abc'), len([1, 2]), len({'a': 1})) # 3 2 1
isinstance 与 type 的区别
isinstance(obj, class_or_tuple):考虑继承关系,传入元组可以检查多个类型,推荐使用。type(obj):严格返回对象的实际类型,不考虑继承。
class Animal:
pass
class Dog(Animal):
pass
d = Dog()
print(isinstance(d, Dog)) # True
print(isinstance(d, Animal)) # True,Dog 是 Animal 的子类
print(type(d) == Dog) # True
print(type(d) == Animal) # False,只认实际类型
优先使用
isinstance,除非需要精确匹配类型而不允许继承。