Содержание страницы
16.9. rlcompleter – функция автодополнения для GNU readline¶rlcompleter – Completion function for GNU readline
Исходный код: Lib/rlcompleter.py
Модуль rlcompleter определяет функцию завершения, подходящую для
модуля readline, дополняя допустимые идентификаторы и ключевые слова Python.
Когда этот модуль импортируется на платформе Unix с доступным модулем readline,
автоматически создаётся экземпляр класса Completer
и его метод complete() устанавливается в качестве завершителя readline.
Пример:
>>> import rlcompleter
>>> import readline
>>> readline.parse_and_bind("tab: complete")
>>> readline. <TAB PRESSED>
readline.__doc__ readline.get_line_buffer( readline.read_init_file(
readline.__file__ readline.insert_text( readline.set_completer(
readline.__name__ readline.parse_and_bind(
>>> readline.
Модуль rlcompleter предназначен для использования в интерактивном режиме Python. Пользователь может добавить следующие строки в свой файл инициализации (определяемый переменной окружения PYTHONSTARTUP), чтобы включить автоматическое автодополнение Tab:
try:
import readline
except ImportError:
print "Module readline not available."
else:
import rlcompleter
readline.parse_and_bind("tab: complete")
На платформах без readline класс Completer, определённый этим модулем, всё ещё может использоваться для пользовательских целей.
16.9.1. Объекты Completer¶Completer Objects
Объекты Completer имеют следующий метод:
-
Completer.complete(text, state)¶ Возвращает state-е завершение для text.
Если text не содержит символа точки (
'.'), будет выполняться автодополнение из имён, определённых в__main__,__builtin__и ключевых слов (в соответствии с модулемkeyword).Если вызывается для составного имени (с точками), он попытается вычислить любую часть без очевидных побочных эффектов (функции не будут вызываться, но может быть сгенерирован вызов
__getattr__()) вплоть до последней части, и найти совпадения для остатка с помощью функцииdir(). Любое исключение, возникшее при вычислении выражения, перехватывается, подавляется и возвращаетсяNone.