La función callable() de Python

Python3 内置函数Funciones integradas de Python3


callable()Es una función integrada de Python que se utiliza para comprobar si un objeto es invocable.

En Python, las funciones, los métodos, las clases, etc., son objetos invocables.callable()Puede ayudarnos a comprobar si un objeto puede ser invocado antes de llamarlo, evitando errores en tiempo de ejecución.

Definición de palabras: callable 意为"可调用的",表示对象是否可以像函数一样被调用。


Sintaxis básica y parámetros

Formato de sintaxis

callable(object)

Descripción de parámetros

  • Parámetro object:
    • Tipo: cualquier objeto
    • Descripción: el objeto a comprobar.

Descripción de la función

  • Valor de retorno: Devuelve un valor booleanoTrueoFalse。
  • Nota: Devolver True no significa que la llamada tendrá éxito, solo indica que el objeto es invocable.

Ejemplos

Ejemplo 1: Comprobar varios objetos

Ejemplo

# Función
def my_func():
    pass

print(callable(my_func))  # Salida: True

# Método
class MyClass:
    def my_method(self):
        pass

obj = MyClass()
print(callable(obj.my_method))  # Salida: True

# Clase (una clase puede ser invocada para crear instancias)
print(callable(MyClass))  # Salida: True

# Función integrada
print(callable(len))   # Salida: True
print(callable(print))  # Salida: True

# Cadena (no invocable)
print(callable("hello"))  # Salida: False

# Número (no invocable)
print(callable(123))  # Salida: False

# Expresión lambda
my_lambda = lambda x: x * 2
print(callable(my_lambda))  # Salida: True

Resultado esperado de la ejecución:

True
True
True
True
True
False
False
True

Análisis del código:

  1. Las funciones, métodos, clases y expresiones lambda son invocables.
  2. Los tipos básicos como cadenas y números no son invocables.

Ejemplo 2: Aplicación práctica

Ejemplo

# Llamada segura a una función
def safe_call(obj, *args, **kwargs):
    if callable(obj):
        return obj(*args, **kwargs)
    else:
        return f"{obj} no es invocable"

# Prueba
def greet(name):
    return f"Hello, {name}!"

print(safe_call(greet, "Tom"))  # Salida: Hello, Tom!
print(safe_call("not a function"))  # Salida: not a function no es invocable

# Uso en diseño de API
class EventHandler:
    def __init__(self):
        self.handlers = {}

    def register(self, event, handler):
        if not callable(handler):
            raise TypeError("handler debe ser invocable")
        self.handlers[event] = handler

    def trigger(self, event, *args):
        if event in self.handlers:
            return self.handlers[event](*args)

handler = EventHandler()
handler.register("click", lambda: "manejar clic")
print(handler.trigger("click"))  # Salida: manejar clic

# Registrar un objeto no invocable provocará un error
# handler.register("error", "not callable") # lanza TypeError

Resultado esperado de la ejecución:

Hello, Tom!
not a function 不可调用
处理点击

callable()Es muy útil cuando se necesita invocar funciones dinámicamente o validar funciones de devolución de llamada.


Python3 内置函数Funciones integradas de Python3


Otras extensiones