14. Editing e history substitution nell’input interattivo

Alcune versioni dell’interprete Python supportano l’editing dell’input corrente e la history substitution, in modo analogo alle shell Korn e GNU Bash. Questa possibilità è implementata con la libreria GNU Readline, che supporta diversi stili di editing e che ha una sua documentazione, che pertanto non ripetiamo in questa sede.

14.1. Tab completion e history editing

Il completamento delle variabili e dei nomi dei moduli è abilitato automaticamente all’avvio dell’interprete, così che il tasto Tab invoca la funzione di completion cercando tra i nomi delle istruzioni, le variabili locali e i nomi dei moduli disponibili. Le espressioni con il punto, come string.a, sono valutate fino al punto finale; quindi vengono suggeriti completamenti tratti dagli attributi dell’oggetto risultante. Si noti che così facendo è possibile che sia eseguito del codice dell’applicazione, se l’espressione comprende un oggetto con un metodo __getattr__() definito. La configurazione di default salva inoltre la storia dei comandi in un file .python_history nella vostra directory home. La storia sarà nuovamente disponibile nella prossima sessione dell’interprete.

14.2. Alternative all’interprete interattivo

Queste funzionalità costituiscono un grande passo avanti rispetto alle prime versioni dell’interprete. Tuttavia, alcune cose restano irrisolte: sarebbe utile presentare un rientro adeguato per le linee di continuazione, dal momento che l’interprete riconosce se il prossimo token richiede un rientro. Il meccanismo di completamento potrebbe utilizzare la tabella dei simboli dell’interprete. Sarebbe anche utile avere un comando per controllare o suggerire il bilanciamento delle parentesi, degli apici etc.

Un’alternativa potenziata per l’interprete interattivo, disponibile da parecchi anni, è IPython che supporta la tab completion, l’esplorazione degli oggetti e la gestione avanzata della storia dei comandi. Può anche essere personalizzato in molti aspetti e incorporato in altre applicazioni. Un ambiente di sviluppo simile è bpython.