• Non ci sono risultati.

Input ed Editing Interattivo Sostituzioni e Cronologia.

Nel documento Manuale Pyton (pagine 106-109)

Alcune versioni di Python supportano l'editing della riga di input corrente e la sostituzione con la cronologia, simili agli editor presenti nella shell Korn e la shell GNU Bash. Questo è implementato utilizzando la libreria GNU GNU Readline, che supporta lo stile Emacs e l'editing in stile vi. Questa libreria ha la propria documentazione che non voglio duplicare qui, tuttavia, le basi sono facilmente spiegabili. L'editing interattivo e la cronologia qui descritta sono disponibili a scelta nelle versioni Unix e Cygwin dell'interprete.

Questo capitolo non documenta i servizi di editing del pacchetto PythonWin di Mark Hammond o l'ambiente IDLE basato su Tk distribuito con Python. Il richiamo alla storia della riga di comando che opera all'interno delle finestre DOS su NT e alcuni altri ricordi DOS e Windows sono un'altra bestia.

13.1. Editare le Linee.

Se supportato, l'editing della riga di input è attivo ogni volta che l'interprete stampa un prompt primario o secondario. L'attuale linea può essere modificata usando i caratteri di controllo convenzionali di Emacs. I più importanti sono (CTRL sta per Control + tasto specifico):

• CTRL-A sposta il cursore all'inizio della riga. • CTRL-E sposta il cursore alla fine.

• CTRL-B lo muove di una posizione a sinistra. • CTRL-F lo muove di una posizione a destra.

• BackSpace cancella il carattere a sinistra del cursore. • CTRL-D cancella il carattere alla sua destra.

• CTRL-K elimina il resto della riga alla destra del cursore. • CTRL-Y ripristina l'ultima stringa eliminata.

• CTRL-_ (sottolineatura) annulla l'ultima modifica effettuata, può essere ripetuto per effetto cumulativo.

13.2. Sostituzione cronologica.

La sostituzione cronologica funziona come segue. Tutte le linee di ingresso non vuote immesse vengono salvati in una memoria storica sequenziale, e quando viene dato un nuovo prompt si posiziona su una nuova riga in fondo a questa memoria. Quindi:

• CTRL-P sposta di una riga verso l'alto (indietro) nella memoria storica. • CTRL-N si muove su una riga sotto (se esiste).

• CTRL-S avvia una ricerca in avanti.

Ogni linea nella memoria storica, può essere modificata. Premendo il tasto INVIO si passa la riga corrente all'interprete.

13.3. Tasti Collegati.

Le associazioni dei tasti e alcuni altri parametri della libreria readline possono essere personalizzati inserendo i comandi in un file di inizializzazione chiamato ~/.inputrc. Le associazioni dei tasti hanno la seguente forma:

key­name: nome­funzione

oppure:

"stringa": nome­funzione

più opzioni possono essere impostate con:

set nome­opzione valore Per esempio: # A chi preferisce lo stile dell'editor vi: set editing­mode vi # Editare usando una linea singola: set horizontal­scroll­mode On # Ridefinire il collegamento di alcuni tasti: Meta­h: backward­kill­word "\C­u": universal­argument "\C­x\C­r": re­read­init­file

Si noti che l'associazione per il Tab in Python è predefinito ad inserire un carattere di tabulazione invece di una funzione di completamento di Readline. Volendo, è possibile ignorare questo comportamento immettendo:

Tab: complete

nel file vostro file ~/.inputrc. (Naturalmente, questo rende più difficile le righe di continuazione indentate se siete abituati ad usare Tab per tale scopo.)

Il completamento automatico dei nomi delle variabili e dei moduli è disponibile come optional. Per abilitarlo in modalità interattiva dell'interprete, aggiungere quanto segue al file di avvio: [1]

import rlcompleter, readline

readline.parse_and_bind('tab: complete')

La seconda riga, associa il tasto Tab per la funzione di completamento, questo premendo due volte il tasto Tab.

Un file di impostazioni d'avvio evoluto, potrebbe essere simile a questo esempio. Si noti che questo cancella i nomi che crea una volta che non sono più necessari, questo viene fatto in quanto il file di avvio viene eseguito nello stesso spazio dei nomi dei comandi interattivi, e la rimozione dei nomi evita effetti collaterali per l'ambiente interattivo. Può essere utile mantenere alcuni moduli importati, come os, che risultano essere necessari nella maggior parte delle sessioni dell'interprete.

# Aggiunge l'auto­completamento e un file per la cronologia comandi. # Viene attivato autocomplete . # Setta il tasto 'Esc' come predefinito (si può cambiare # vedere al documentazione readline). # Salva nel file ~/.pystartup, e imposta una variabile ambiente # a cui puntare. Che è:  "export PYTHONSTARTUP=~/.pystartup" con bash. import atexit import os import readline import rlcompleter historyPath = os.path.expanduser("~/.pyhistory") def save_history(historyPath=historyPath):     import readline     readline.write_history_file(historyPath) if os.path.exists(historyPath):     readline.read_history_file(historyPath) atexit.register(save_history) del os, atexit, readline, rlcompleter, save_history, historyPath

13.4. Alternative all'Interprete Interattivo Predefinito.

Le funzionalità di questo nuovo interprete, è un enorme passo in avanti rispetto alle precedenti versioni tuttavia, alcuni cose lasciano ancora a desiderare: Sarebbe bello se la corretta indentazione fosse possibile su linee successive, magari aggiungendo un trattino di sottolineatura presente in altri linguaggi! (il parser saprebbe distinguerlo). Poi il meccanismo di completamento potrebbe usare la tabella dei simboli dell'interprete. Ancora un comando per controllare (o anche suggerire) le corrispondenze tra parentesi, le citazioni, ecc, tutto ciò, sarebbe molto utile. In effetti l'interprete standard così com'è non si preoccupa

molto dell'utente, presuppone un' utilizzatore che abbia grande dimestichezza con editor a linea di comando del tipo vi ed un grande allenamento digitale.

Un'alternativa valida all'interprete interattivo è IPython, che dispone del completamento automatico, l'esplorazione degli oggetti e la gestione avanzata della cronologia. Inoltre esso, può anche essere accuratamente adattato e incorporato in altre applicazioni. Un ambiente interattivo avanzato simile è bpython. Un' altro editor molto utilizzato presente su tutte le piattaforme è IDLE.

Note:

[1]Python eseguirà i contenuti di un file identificato dalla variabile di ambiente PYTHONSTARTUP quando si avvia l'interprete interattivo. Per personalizzare Python anche per la modalità non- interattiva, fare riferimento a The Customization Modules.

14. Aritmetica in Virgola Mobile: Problemi e

Nel documento Manuale Pyton (pagine 106-109)