5个鲜为人知的内置Python函数

简介: callable(x)callable(x)函数检查x是否可被调用。

callable(x)

callable(x)函数检查x是否可被调用。

def hello():
    pass
hi = 1
print(callable(hello))   # True
print(callable(hi))      # False

如果我们有一组变量,不确定它们是否可调用,可以先用callable函数检查,然后再尝试像调用函数一样去调用它们。

class Dog:
    def __call__(self, x):
        pass
class Cat:
    pass
dog = Dog()
cat = Cat()
print(callable(dog))  # True
print(callable(cat))  # False

callable不仅适用于函数,也能用于对象上,我们可以在类上定义__call__方法让产生的对象变得可调用。

divmod(x, y)

print(divmod(6, 3))  # (2, 0)
print(divmod(7, 3))  # (2, 1)
print(divmod(8, 3))  # (2, 2)
print(divmod(9, 3))  # (3, 0)

调用divmod(x, y)时,它会返回一个包含两个元素的元组:

  • x除以y的商,相当于x // y
  • x除以y的余数,相当于x % y

使用divmod(x, y)可以简化代码,将两个数值运算符x // y和x % y合并为一行。

hasattr(object, attribute_name)

asattr(object, attribute_name)用于检查对象是否具有名为attribute_name的属性。如果对象确实有这个属性,函数返回True,否则返回False。

class Dog:
    def __init__(self, name, age):
        self.name = name
        self.age = age
class Cat:
    def __init__(self, name, age, colour):
        self.name = name
        self.age = age
        self.colour = colour
dog = Dog('rocky', 5)
cat = Cat('catty', 6, 'brown')
print(hasattr(dog, 'colour'))  # False
print(hasattr(cat, 'colour'))  # True

我们定义了Dog类具有name和age属性,而Cat类则具有name、age和colour属性。

  • hasattr(dog, 'colour')返回False,因为Dog类没有定义colour属性。
  • hasattr(cat, 'colour')返回True,因为Cat类定义了colour属性。

使用hasattr函数可以在尝试访问属性前,先检查对象是否包含该属性。

isinstance(object, class)

isinstance(object, class)函数检查对象是否是指定类的实例,或者是否继承自该类,返回True或False。

class Animal: pass
class Dog(Animal): pass
class Rice: pass

让我们定义一些类:

  • 一个Animal类
  • 一个从Animal继承的Dog类
  • 一个Rice类
dog = Dog()
print(isinstance(dog, Dog))     # True
print(isinstance(dog, Animal))  # True
print(isinstance(dog, Rice))    # False
  • isinstance(dog, Dog)返回True,因为dog是Dog类的实例。
  • isinstance(dog, Animal)返回True,因为Dog类继承自Animal类,所以dog也是Animal的实例。
  • isinstance(dog, Rice)返回False,因为dog不是Rice类的实例。
a = Animal()
print(isinstance(a, Dog))     # False
print(isinstance(a, Animal))  # True
print(isinstance(a, Rice))    # False
  • Dog 继承 Animal → 所以Dog 是 Animal,但 Animal 不一定是 Dog 所以 isinstance(a, Dog) 返回 False
  • a 是 Animal 类的实例,因此 isinstance(a, Animal) 返回 True
  • a 不是 Rice 类的实例,因此 isinstance(a, rice) 返回 False

issubclass(class1, class2)

issubclass(class1, class2)函数检查class1是否是class2的子类或两者相同,返回True或False。

class Animal: pass
class Dog(Animal): pass
class GermanShepherd(Dog): pass
print(issubclass(Animal, Animal))          # True
print(issubclass(Dog, Animal))             # True
print(issubclass(GermanShepherd, Animal))  # True
  • issubclass(Animal, Animal)返回True,因为Animal类是它自己的子类。
  • issubclass(Dog, Animal)返回True,因为Dog类继承自Animal类。
  • issubclass(GermanShepherd, Animal)返回True,因为GermanShepherd类继承自Dog类,而Dog类又继承自Animal类。
print(issubclass(Animal, Dog))             # False
  • issubclass(Animal, Dog)返回False,因为虽然Dog类是Animal类的子类,但Animal类不一定是Dog类的子类。

作者:写bug写bug

链接:https://juejin.cn/post/7372913965884391439

相关文章
|
11月前
|
存储 JavaScript Java
(Python基础)新时代语言!一起学习Python吧!(四):dict字典和set类型;切片类型、列表生成式;map和reduce迭代器;filter过滤函数、sorted排序函数;lambda函数
dict字典 Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。 我们可以通过声明JS对象一样的方式声明dict
593 2
|
11月前
|
算法 Java Docker
(Python基础)新时代语言!一起学习Python吧!(三):IF条件判断和match匹配;Python中的循环:for...in、while循环;循环操作关键字;Python函数使用方法
IF 条件判断 使用if语句,对条件进行判断 true则执行代码块缩进语句 false则不执行代码块缩进语句,如果有else 或 elif 则进入相应的规则中执行
1752 1
|
11月前
|
Java 数据处理 索引
(numpy)Python做数据处理必备框架!(二):ndarray切片的使用与运算;常见的ndarray函数:平方根、正余弦、自然对数、指数、幂等运算;统计函数:方差、均值、极差;比较函数...
ndarray切片 索引从0开始 索引/切片类型 描述/用法 基本索引 通过整数索引直接访问元素。 行/列切片 使用冒号:切片语法选择行或列的子集 连续切片 从起始索引到结束索引按步长切片 使用slice函数 通过slice(start,stop,strp)定义切片规则 布尔索引 通过布尔条件筛选满足条件的元素。支持逻辑运算符 &、|。
504 0
|
12月前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
438 101
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
357 99
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
609 98
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
Python
Python 函数定义
Python 函数定义
1052 155
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
831 0
|
索引 Python 容器
[oeasy]python096_列表_计数函数_count
本教程详细介绍了Python中列表的计数方法`count`,包括其基本用法、与`len`函数的区别,以及如何结合索引操作查找和删除特定元素。同时探讨了字符串对象的`count`方法,并通过实例演示了如何统计字符出现次数。
343 7

推荐镜像

更多