¿Cómo configurar IPython para ejecutar bloques de celdas de la misma manera que lo hace un REPL de Python?

Vanilla Python REPL:

>>> 'na' 'na' >>> for i in range(4): ... f'{_+_}' ... else: ... 'batman' ... 'nana' 'nananana' 'nananananananana' 'nananananananananananananananana' 'batman' >>> 

IPython REPL con el mismo intérprete:

 >>> 'na' 'na' >>> for i in range(4): ... f'{_+_}' ... else: ... 'batman' ... >>> _ 'na' 

Esta diferencia aparentemente está relacionada con el modo en el que IPython comstack el código y no está relacionada con el gancho de visualización . ¿Es posible configurar IPython para comstackr bloques de celdas exec como lo hace un REPL de Python? Preferiría que IPython no interfiriera o modificara dicha maquinaria subyacente en tiempo de ejecución.

Establezca la configuración de InteractiveShell.ast_node_interactivity en 'all' , ya sea a través del comando %config magic:

 %config InteractiveShell.ast_node_interactivity='all' 

o en tu ipython_config.py

 c.InteractiveShell.ast_node_interactivity = 'all' 

Esto hará que IPython compile todo en 'single' modo 'single' , el modo que activa sys.displayhook , en lugar del modo 'exec' , que no usa sys.displayhook .


Las configuraciones posibles para InteractiveShell.ast_node_interactivity están actualmente

  • 'all' : comstack todo en modo 'single' .
  • 'last' : comstack la última statement (simple o compuesta) de una celda en modo 'single' . Difiere de 'all' en casos como

     In [7]: for i in range(5): ...: i ...: for i in range(3): ...: i ...: Out[7]: 0 Out[7]: 1 Out[7]: 2 

    'all' habría impreso los valores de i desde ambos bucles.

  • last_expr' : comstack la última statement de una celda en modo 'single' si esa statement es una statement de expresión. Este es el predeterminado de IPython.

  • 'none' : comstack todo en modo 'exec' .

  • 'last_expr_or_assign' : como 'last_expr' , pero realiza una transformación AST adicional para imprimir el valor asignado si la última statement es una statement de asignación:

     In [2]: xyz = "something else" Out[2]: "something else"