rlcompleter — GNU readline 的补全函数

源代码: Lib/rlcompleter.py


rlcompleter 模块定义了一个适合传递给 set_completer() 的补全函数,该函数位于 readline 模块中。

当此模块在具有 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