Python の対話型プロンプトで補完機能を使う

メーリングリストに目を通していて、補完機能の存在について知りました。以下の2行でさらっと使えます。

>>> import readline, rlcompleter
>>> readline.parse_and_bind('tab:complete')

例えば、リストの(特殊)メソッドを調べるには "L." の状態で TAB を2回押すと、以下のように補完候補が出力されます。

>>> L=[]
>>> L.
L.__add__           L.__iadd__          L.__rmul__
L.__class__         L.__imul__          L.__setattr__
L.__contains__      L.__init__          L.__setitem__
L.__delattr__       L.__iter__          L.__setslice__
L.__delitem__       L.__le__            L.__str__
L.__delslice__      L.__len__           L.append
L.__doc__           L.__lt__            L.count
L.__eq__            L.__mul__           L.extend
L.__ge__            L.__ne__            L.index
L.__getattribute__  L.__new__           L.insert
L.__getitem__       L.__reduce__        L.pop
L.__getslice__      L.__reduce_ex__     L.remove
L.__gt__            L.__repr__          L.reverse
L.__hash__          L.__reversed__      L.sort

対話型プロンプトの起動時に環境変数 PYTHONSTARTUP で定義されたスクリプトに読み込みます。従って、そのスクリプトに組み込む事で、常にこの機能を有効にすることも可能です。

$ vi ~/.bash_profile
# for Python
PYTHONSTARTUP=$HOME/.pythonrc.py
export PYTHONSTARTUP

当初、自分で .pythonrc.py を作ろうとと調べているうちに、きれいにまとめられたサイトを発見しました。以下のサイトを紹介します。そこではファイルの補完機能も付加しています。素晴らしいです。

Interactive modeにおける補完
Interactive modeにおける補完2

リファレンス:
7.20 readline -- GNU readline のインタフェース
7.21 rlcompleter -- GNU readline向け補完関数