¿Progtwigr sistemáticamente la salida de celda actual del portátil Ipython?

Tengo una función importada que se ejecuta en un cuaderno IPython (celda de entrada X) que produce una salida (en la celda de salida X). Después de que se ejecuta la función, tengo más código (también en la celda de entrada X); ¿Hay alguna forma para que ese código recupere la salida actual (en la celda de salida X)?

Puede haber otras formas de hacer lo que estoy tratando de lograr; Pero tengo curiosidad si lo anterior es posible.

¡Gracias!

El sistema de almacenamiento en caché de salida de IPython define varias variables globales:

  • [ _ ] (un solo guión bajo): almacena la salida anterior, como el intérprete predeterminado de Python.
  • [ __ ] (dos guiones bajos): siguiente anterior.
  • [ ___ ] (tres guiones bajos): siguiente siguiente siguiente.

Además, después de crear cada salida x , hay una variable _ creada con la salida como su valor. Por ejemplo:

 In [12]: lst = [i for i in range(11)] In [13]: lst Out[13]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] In [14]: _13 Out[14]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Además, si está interesado, _i contiene el contenido de la celda de entrada x :

 In [15]: _i12 Out[15]: 'lst = [i for i in range(11)]' 

Puede obtener la salida de la celda X utilizando _ o Out[X] . Como:

 In [1]: 2 + 35 Out[1]: 37 In [2]: _ + 3 Out[2]: 40 In [3]: lst = [i for i in range(5)] lst Out[3]: [0, 1, 2, 3, 4] In [4]: Out[1] #Using the output of Cell 1 Out[4]: 37 In [5]: Out[3][1] #Using the output of Cell 3 Out[5]: 1 

Aquí, si desea obtener la salida de la celda anterior, entonces puede usar _ . Puede usar dos ( __ ) o tres guiones bajos ( ___ ) también para referirse a la salida de las siguientes celdas anterior y siguiente a la siguiente, respectivamente.

Sin embargo, si tiene muchas celdas en el cuaderno y quiere referir alguna celda en particular, entonces Out[X] será útil.

Las respuestas existentes no funcionan cuando una celda llama a una función que genera su propia stdout .

Encontré una solución diferente que captura toda la salida de la celda anterior, sin importar cómo se haya producido.

 # cell 1: %%capture output print("blah") func_that_prints("Bha") # ----------------- # cell 2: prev_cell_output = str(output) # do something with prev_cell_output 

Tenga en cuenta que la línea de %%capture debe ser la primera línea de una celda para que funcione. output puede ser renombrada a cualquier otro nombre de variable. No habrá salida para la primera celda mostrada (ya que será capturada).

output está disponible solo en la siguiente celda. Es un objeto utils.io.CapturedIO , por lo que puede serlo, o incluso llamar a .show() , que mostrará su contenido.

Para obtener más información, por ejemplo, capturar solo stdout , o simplemente stderr use la referencia .