跳到主要内容

逻辑判断

常用的逻辑判断内置函数:

函数说明示例
all(iterable)所有元素为真返回 True,空序列返回 Trueall([1, 2, 3]) → True
any(iterable)任一元素为真返回 True,空序列返回 Falseany([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,除非需要精确匹配类型而不允许继承。