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

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

3 días ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

5 días ago

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

1 semana ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

2 semanas ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

2 semanas ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

3 semanas ago

This website uses cookies.