Python

Ver el código de cualquier función en Python

Una característica bastante interesante de R es la posibilidad de ver el código de una función simplemente escribiendo el nombre de estas sin paréntesis. Lo que permite ver y comprender el funcionamiento de estas. Independientemente de que sea una función creada por nosotros o una que se hubiese importado de un paquete. Esta característica no existe como tal en Python, pero es algo que se puede solucionar con la biblioteca inspect de la librería estándar del lenguaje. En esta entrada se explicará cómo se puede usar esta biblioteca para tener acceso al código de cualquier función en Python.

inspect de Python

La biblioteca inspect de Python proporciona funciones para analizar los objetos que se encuentran en memoria durante la ejecución de un programa. Mediante la cual se puede obtener información de los módulos, clases, funciones y el resto de los objetos importados. Dado que es una biblioteca de la librería estándar de Python ya se encuentra instalada en nuestra cualquier distribución, por lo que no es necesario instalarla con el comando pip.

Obtener el código de cualquier función en Python

Para obtener el código de cualquier función en Python se puede usar la función getsource() de la biblioteca inspect. Una función a la que solamente se le debe pasar como parámetro un objeto que se encuentre en vivo en memoria, tanto importado de una librería, de un archivo o definido en el programa. Por ejemplo, a continuación se puede crear una función sencilla y ver cómo se puede obtener el código con la función la función getsource()

import inspect

# Definimos una función simple
def mi_funcion():
    return "Hola, mundo!"

# Vamos a ver el código fuente de la función que acabamos de definir
codigo_fuente = inspect.getsource(mi_funcion)

# Imprimimos el código fuente
print(codigo_fuente)
def mi_funcion():
    return "Hola, mundo!"

Nótese que la función getsource() recibe el objeto que se desea analizar no una cadena de texto con el nombre de este. Esto se puede hacer con funciones de cualquier librería como max() de NumPy.

import inspect
import numpy as np

# Vamos a ver el código fuente de la función que np.max
codigo_fuente_max = inspect.getsource(np.max)

# Imprimimos el código fuente de np.max
print(codigo_fuente_max)

En este caso no se muestra la salida del comando dado que es bastante largo.

Limitaciones de getsource()

La función getsource() no permite ver el código de funciones o métodos integrados o compilados que están escritos en C, ya que solamente puede mostrar código Python.

Otras funciones en inspect

La biblioteca inspect no solamente permite mostrar el código fuente de una función Python, también puede proporcionar información detallada sobre los argumentos de estas. Por ejemplo, el método signature() permite obtener información sobre los argumentos de la función

# Vamos a ver la firma de la función que np.max
firma = inspect.signature(np.max)

# Imprimimos la firma 
print(firma)
(a, axis=None, out=None, keepdims=<no value>, initial=<no value>, where=<no value>)

Lo que puede ser extremadamente útil para comprender cómo interactuar con una función y qué parámetros espera.

Conclusiones

En esta entrada se ha explicado cómo se puede usar la biblioteca inspect para mostrar el código de cualquier función en Python. Una herramienta que puede ser muy útil para conocer las implementaciones de las funciones que se están utilizando y comprender estas. Además de ser una forma rápida para saber si la función que se ha importado es la que se desea en cada momento.

Imagen de Johnson Martin en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 días ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

7 días ago

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

1 semana ago

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

2 semanas ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

2 semanas ago

Los indicadores que se autocumplen, o cuando medir es modificar – El bestiario de los indicadores económicos absurdos (parte 7)

En las seis entregas anteriores hemos paseado por casi todos los géneros del disparate económico:…

3 semanas ago

This website uses cookies.