rlcompleter — GNU readline 的补全函数

源代码: Lib/rlcompleter.py


rlcompleter 模块定义了一个补全函数,适合作为参数传递给 readline 模块中的 set_completer()

当在具有 readline 模块的 Unix 平台上导入此模块时,会自动创建一个 Completer 类的实例,并将其 complete() 方法设置为 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 模块专为 Python 的交互模式而设计。除非 Python 运行带 -S 选项,否则该模块会自动导入并配置(参见Readline 配置)。

在没有 readline 的平台上,此模块定义的 Completer 类仍可用于自定义目的。

class rlcompleter.Completer

Completer 对象具有以下方法

complete(text, state)

返回 text 的下一个可能的补全。

当被 readline 模块调用时,此方法会以 state == 0, 1, 2, ... 依次调用,直到该方法返回 None

如果为不包含句点字符 ('.') 的 text 调用,它将从当前在 __main__builtins 中定义的名称和关键字(由 keyword 模块定义)进行补全。

如果调用的是带点的名称,它将尝试评估任何没有明显副作用的东西(函数不会被评估,但可能会生成对 __getattr__() 的调用),直到最后一部分,并通过 dir() 函数查找其余部分的匹配项。在表达式评估过程中引发的任何异常都会被捕获、静默处理并返回 None