14. Interaktywna edycja danych wejściowych oraz podstawianie z historii

Niektóre wersje interpretera Python, podobnie jak ułatwienia znajdowane w powłokach Korn i GNU Bash, wspierają edycję bieżącej linii danych wejściowych oraz podstawianie z historii. Do implementacji użyto biblioteki GNU Readline, która wspiera różne style edytowania. Biblioteka ta ma własną dokumentację, której nie będziemy tutaj powielać.

14.1. Uzupełnianie z tabulatorem oraz edycja historii

Uzupełnianie zmiennych i nazw modułów jest włączane automatycznie podczas uruchamiania interpretera w taki sposób, że klawisz Tab wywołuje funkcję uzupełniania; sprawdza nazwy instrukcji Pythona, bieżące zmienne lokalne oraz dostępne nazwy modułów. Dla wyrażeń kropkowanych takich jak string.a, ewaluuje wyrażenie do ostaniej '.', a następnie sugeruje uzupełnienie z atrybutów obiektu wynikowego. Zauważ, że może to wykonać zdefiniowany w aplikacji kod, jeżeli obiekt z metodą __getattr__() jest częścią wyrażenia. Domyślna konfiguracja zapisuje także twoją historię do pliku .python_history w katalogu użytkownika. Historia będzie ponownie dostępna podczas następnej interaktywnej sesji interpretera.

14.2. Alternatywy dla interaktywnego interpretera

To ułatwienie jest olbrzymim krokiem naprzód w porównaniu z wcześniejszymi wersjami interpretera, jednakże, niektóre życzenia pozostają: byłoby dobrze, gdyby prawidłowe wcięcia były podpowiadane w kontynuowanych liniach (analizator składni wie, jeżeli token wcięcia jest dalej wymagany). Mechanizm uzupełniania mógłby używać tabeli symboli interpretera. Polecenie, aby sprawdzić (lub nawet podpowiedzieć) pasujący nawias, cudzysłów itp. także byłoby użyteczne.

Jednym z alternatywnych udoskonalonych interaktywnych interpreterów dostępnych od pewnego czasu jest IPython, który posiada funkcję uzupełniania tabulatorem, eksplorację obiektów oraz zaawansowane zarządzanie historią. Można go także wszechstronnie dostosowywać oraz osadzać w innych aplikacjach. Innym podobnym udoskonalonym środowiskiem interaktywnego interpretera jest bpython.