> **Источник:** https://python-all.ru/2.7/library/rlcompleter.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 16.9. [`rlcompleter`](https://python-all.ru/2.7/library/rlcompleter.html#module-rlcompleter) – функция автодополнения для GNU readline

**Исходный код:** [Lib/rlcompleter.py](https://python-all.ru/src/2.7/Lib/rlcompleter.py)

---

Модуль [`rlcompleter`](https://python-all.ru/2.7/library/rlcompleter.html#module-rlcompleter) определяет функцию завершения, подходящую для модуля [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline), дополняя допустимые идентификаторы и ключевые слова Python.

Когда этот модуль импортируется на платформе Unix с доступным модулем [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline), автоматически создаётся экземпляр класса `Completer` и его метод `complete()` устанавливается в качестве завершителя [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline).

Пример:

```python
>>> 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`](https://python-all.ru/2.7/library/rlcompleter.html#module-rlcompleter) предназначен для использования в интерактивном режиме Python. Пользователь может добавить следующие строки в свой файл инициализации (определяемый переменной окружения [`PYTHONSTARTUP`](https://python-all.ru/2.7/using/cmdline.html#envvar-PYTHONSTARTUP)), чтобы включить автоматическое автодополнение `Tab`:

```python
try:
    import readline
except ImportError:
    print "Module readline not available."
else:
    import rlcompleter
    readline.parse_and_bind("tab: complete")
```

На платформах без [`readline`](https://python-all.ru/2.7/library/readline.html#module-readline) класс `Completer`, определённый этим модулем, всё ещё может использоваться для пользовательских целей.

## 16.9.1. Объекты Completer

Объекты Completer имеют следующий метод:

#### `Completer.complete(text, state)`

Возвращает *state*-е завершение для *text*.

Если *text* не содержит символа точки (`'.'`), будет выполняться автодополнение из имён, определённых в [`__main__`](https://python-all.ru/2.7/library/__main__.html#module-__main__), [`__builtin__`](https://python-all.ru/2.7/library/__builtin__.html#module-__builtin__) и ключевых слов (в соответствии с модулем [`keyword`](https://python-all.ru/2.7/library/keyword.html#module-keyword)).

Если вызывается для составного имени (с точками), он попытается вычислить любую часть без очевидных побочных эффектов (функции не будут вызываться, но может быть сгенерирован вызов [`__getattr__()`](https://python-all.ru/2.7/reference/datamodel.html#object.__getattr__)) вплоть до последней части, и найти совпадения для остатка с помощью функции [`dir()`](https://python-all.ru/2.7/library/functions.html#dir). Любое исключение, возникшее при вычислении выражения, перехватывается, подавляется и возвращается [`None`](https://python-all.ru/2.7/library/constants.html#None).
