摘要:在 Python 中,并不是所有对象都能像函数那样“被调用”。内置函数 callable 就是用来判断一个对象是否可调用的工具。它在动态编程、反射、插件机制中非常实用,能帮助我们在运行时安全地确定某个对象是否支持以函数方式执行。
在 Python 中,并不是所有对象都能像函数那样“被调用”。内置函数 callable 就是用来判断一个对象是否可调用的工具。它在动态编程、反射、插件机制中非常实用,能帮助我们在运行时安全地确定某个对象是否支持以函数方式执行。
一、函数语法
callable(object)参数:
object:任意 Python 对象。
返回值:
True:表示对象可调用。即可以使用 object 的形式调用。
False:表示对象不可调用。
二、基础用法示例
1、判断函数和类
def func: return "hello"class MyClass:passprint(callable(func)) # True(函数可调用)print(callable(MyClass)) # True(类本身可调用)2、判断实例对象
class MyClass:passobj = MyClassprint(callable(obj)) # False(普通实例不可调用)3、实现 __call__ 的对象
class Functor:def __call__(self):return "I am callable!"f = Functorprint(callable(f)) # True(实例可调用)print(f) # I am callable!三、对象的可调用性
1、哪些对象是可调用的?
(1)函数(包括用户自定义函数和内置函数)。
(2)类(调用类会生成实例)。
(3)方法(实例方法、类方法、静态方法)。
(4)定义了 __call__ 方法的对象(俗称“可调用对象”)。
2、哪些对象不可调用?
(1)普通实例(除非实现 __call__)。
(2)字符串、列表、字典、整数等常见数据类型。
四、进阶技巧
1、与高阶函数配合使用
在回调函数机制中,可先用 callable 检查参数。
def run(func):if callable(func):print(func)else:print("参数不可调用")run(lambda: "ok") # okrun(123) # 参数不可调用2、结合反射或动态加载使用
import mathattr = getattr(math, "sqrt")if callable(attr):print(attr(16)) # 4.0五、补充说明
1、类对象总是可调用的,因为调用类时会触发 __new__ 和 __init__ 方法。
2、实例对象是否可调用,取决于是否实现了 __call__ 方法。
3、函数对象(functor)既能保存内部状态,又能像函数一样使用,适合用于回调、懒加载、装饰器等场景。
4、callable 只判断对象是否具备调用能力,但并不会实际调用对象本身。即使对象可调用,调用时仍可能因参数错误等原因抛出异常。
小结
callable 是判断对象能否以“函数方式”调用的工具函数。它返回布尔值,不会真正执行调用。常见可调用对象包括函数、类、方法以及实现了 __call__ 的实例。在动态编程和框架开发中,callable 能提高代码健壮性,避免误调用出错。
“点赞有美意,赞赏是鼓励”
来源:志天教育