La función callable() de Python
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 booleano
TrueoFalse。 - 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
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:
- Las funciones, métodos, clases y expresiones lambda son invocables.
- 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
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.
Funciones integradas de Python3
Otras extensiones