Historial de entrada y salida

Historial de entrada y salida



Anteriormente, vimos que el shell de IPython le permite acceder a los comandos anteriores con las teclas de flecha hacia arriba y hacia abajo, o de manera equivalente, los atajos Ctrl-p/Ctrl-n. Además, tanto en el shell como en el cuaderno, IPython expone varias formas de obtener el resultado de los comandos anteriores, así como versiones de cadena de los propios comandos. Exploraremos esos aquí.


Objetos In y Out de IPython

A estas alturas, imagino que está bastante familiarizado con las solicitudes de estilo In[1]:/Out[1]: utilizadas por IPython. Pero resulta que estos no son solo una bonita decoración: dan una pista sobre cómo puede acceder a entradas y salidas anteriores en su sesión actual. Imagina que inicias una sesión que se ve así:


In [1]: import math

In [2]: math.sin(2)
Out[2]: 0.9092974268256817

In [3]: math.cos(2)
Out[3]: -0.4161468365471424


Hemos importado el paquete math incorporado, luego calculamos el seno y el coseno del número 2. Estas entradas y salidas se muestran en el shell con In/Out, pero hay más: IPython en realidad crea algunas variables de Python llamadas In y Out que se actualizan automáticamente para reflejar este historial:


In [4]: print(In)
['', 'import math', 'math.sin(2)', 'math.cos(2)', 'print(In)']

In [5]: Out
Out[5]: {2: 0.9092974268256817, 3: -0.4161468365471424}


El objeto In es una lista, que realiza un seguimiento de los comandos en orden (el primer elemento de la lista es un marcador de posición para que In[1] pueda referirse a el primer comando):



In [6]: print(In[1])
import math


El objeto Out no es una lista sino un diccionario que asigna números de entrada a sus salidas (si las hay):


In [7]: print(Out[2])
0.9092974268256817


Tenga en cuenta que no todas las operaciones tienen salidas: por ejemplo, las sentencias import y las sentencias print no afectan la salida. Esto último puede resultar sorprendente, pero tiene sentido si considera que print es una función que devuelve None; para abreviar, cualquier comando que devuelva None no se agrega a Out.


Donde esto puede ser útil es si desea interactuar con resultados anteriores. Por ejemplo, verifiquemos la suma de sin(2)**2 y cos(2)**2 utilizando los resultados calculados previamente:


In [8]: Out[2] ** 2 + Out[3] ** 2
Out[8]: 1.0


El resultado es 1.0 como cabría esperar de la conocida identidad trigonométrica. En este caso, probablemente no sea necesario usar estos resultados anteriores, pero puede resultar muy útil si ejecuta un cálculo muy costoso y desea reutilizar el resultado.


Subrayar accesos directos y salidas anteriores

El shell estándar de Python contiene solo un atajo simple para acceder a la salida anterior; la variable _ (es decir, un solo guión bajo) se mantiene actualizada con la salida anterior; esto también funciona en IPython:


In [9]: print(_)
1.0


Pero IPython lleva esto un poco más lejos: puede usar un guión bajo doble para acceder a la penúltima salida, y un guión bajo triple para acceder a la penúltima salida (omitiendo cualquier comando sin salida):


In [10]: print(__)
-0.4161468365471424

In [11]: print(___)
0.9092974268256817


IPython se detiene allí: más de tres guiones bajos comienzan a ser un poco difíciles de contar, y en ese punto es más fácil referirse a la salida por número de línea.


Sin embargo, hay un atajo más que debemos mencionar: una forma abreviada de Out[X] es _X (es decir, un guión bajo simple seguido del número de línea):


In [12]: Out[2]
Out[12]: 0.9092974268256817

In [13]: _2
Out[13]: 0.9092974268256817


Supresión de salida

A veces, es posible que desee suprimir la salida de una declaración (esto es quizás más común con los comandos de trazado que exploraremos en Introducción a Matplotlib). O tal vez el comando que está ejecutando produce un resultado que preferiría que no quisiera almacenar en su historial de salida, tal vez para que pueda ser desasignado cuando se eliminen otras referencias. La forma más sencilla de suprimir la salida de un comando es agregar un punto y coma al final de la línea:


In [14]: math.sin(2) + math.cos(2);


Tenga en cuenta que el resultado se calcula de forma silenciosa y la salida no se muestra en la pantalla ni se almacena en el diccionario Out:


In [15]: 14 in Out
Out[15]: False


Comandos mágicos relacionados

Para acceder a un lote de entradas anteriores a la vez, el comando mágico %history es muy útil. Así es como puede imprimir las primeras cuatro entradas:


In [16]: %history -n 1-4
   1: import math
   2: math.sin(2)
   3: math.cos(2)
   4: print(In)


Como de costumbre, puede escribir %history? para obtener más información y una descripción de las opciones disponibles. Otros comandos mágicos similares son %rerun (que volverá a ejecutar una parte del historial de comandos) y %save (que guarda parte del historial de comandos en un archivo) . Para obtener más información, sugiero explorarlos utilizando la función de ayuda ? que se describe en Ayuda y documentación en IPython.


JeshuaNomics

JeshuaNomics - DataScience es una web de divulgación donde se puede encontrar material formativo en ciencia de datos y programación estadística (R, Python y SQL).

Publicar un comentario (0)
Artículo Anterior Artículo Siguiente