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
Deja una respuesta