Python callable() 函数

Python callable() 语法

callable() 是 Python 的一个内置函数,它用于判断给定对象是否是可调用的(也就是能否通过括号运算符执行)。

语法:

callable(object)

说明:

callable() 函数接收单个参数。

  • object(必选):任意 Python 对象(不限于可迭代对象)。

callable() 函数返回一个布尔值,即 True 或 False。如果对象是可调用的,则返回 True;如果对象是不可调用的,则返回 False。

在 Python 中,常见的可调用对象包括:

  • 函数(包括内置函数、用户定义函数、lambda 表达式)。
  • 方法(包括实例方法、类方法、静态方法)。
  • 类(调用类会创建该类的一个新实例)。
  • 实现了 __call__() 特殊方法的类的实例(这些实例被称为 “可调用对象” 或 “仿函数”)。

提示: 如果一个对象定义了 __call__() 方法,则被认为是可调用的。

Python callable() 摘要

使用频率
官方文档 查看

Python callable() 示例

接下来,我们通过几个简单的例子来讲解一下 Python callable() 函数是如何使用的。

示例 1:callable() 基本用法

colors = ['red', 'green', 'blue']
print(callable(colors))
print(callable(list))

运行结果如下。

False
True

分析:

colors 是一个列表,你可以将其看成是 list 的实例。从结果可以看出,list 的实例是不可调用的,但 list 这个类是可调用的。

示例 2:callable() 用于自定义类

# 定义类
class Rect():
    def __init__(self, width, height):
        self.width = width
        self.height = height

# 实例化
r = Rect(20, 10)
print(callable(r))
print(callable(Rect))

运行结果如下。

False
True

分析:

Rect 是一个类,而 r 是类的实例。默认情况下,对于一个类来说,它本身是可调用的,但它的实例却是不可调用的。

示例 3:实现 __call__() 方法的类

# 定义类
class Rect():
    def __init__(self, width, height):
        self.width = width
        self.height = height
    def __call__(self):
        pass

# 实例化
r = Rect(20, 10)
print(callable(r))
print(callable(Rect))

运行结果如下。

True
True

分析:

如果一个类内部定义了 __call__() 方法,那么除了它本身是可调用之外,它的实例也是可调用的。

示例 4:callable() 检测 “函数” 与 “方法”

# 定义函数
def greeting(name):
    return f'Hello {name}'

# 定义类和方法
class MyObject:
    def method(self):
        pass

print(callable(greeting))             # True(函数可调用)
print(callable(MyObject.method))      # True(未绑定方法)
print(callable(MyObject().method))    # True(绑定方法)
print(callable(lambda x: x**2))       # True(lambda 表达式)

运行结果如下。

True
True
True
True

示例 5:callable() 检测特殊值

import math

print(callable(math.pi))            # False(常量不可调用)
print(callable(math.sqrt))          # True(函数可调用)
print(callable(ValueError))         # True(异常类可调用)
print(callable((lambda: None)))     # True(匿名函数)

运行结果如下。

False 
True
True
True

上一篇: issubclass()

下一篇: hasattr()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号