Python
 Computer >> コンピューター >  >> プログラミング >> Python

GNU readlineのPython補完関数:rlcompleterモジュールの使い方

Unixのreadlineモジュールには、タブ補完(Tab Completion)の仕組みが備わっています。この機能をPythonで利用するには、標準ライブラリの「rlcompleter」モジュールを使用します。rlcompleterは、Pythonの対話モード(インタラクティブシェル)における入力補完を実現するためのモジュールです。

rlcompleterモジュールのインポート

このモジュールを利用するには、まず以下のようにインポートします。

import rlcompleter

Completerクラスとは

rlcompleterモジュールには「Completer」というクラスが定義されています。このクラスのインスタンスを生成することで、補完機能をプログラムから利用できるようになります。

Completer.complete(text, state) メソッド

このメソッドは、タブ補完の結果を返すために使用されます。動作の仕組みは以下のとおりです。

  • テキストに「.」(ドット)が含まれる場合:そのオブジェクトに関連する属性やメンバーをすべて取得しようとします。
  • ドットが含まれない場合:入力されたテキストに一致するキーワードや組み込み関数などの名前を補完します。

サンプルコード

以下は、Completerクラスを使って実際に補完を行う例です。

import rlcompleter
import sys

my_completer = rlcompleter.Completer()

phrase_list = ['co', 'sys.m', 'cal']

for phrase in phrase_list:
    print(phrase + ' (TAB): ', end='')
    try:
        for i in range(50):
            terms = my_completer.complete(phrase, i)
            if terms is None:
                break
            print(terms, end='\t')
    except:
        pass
    print()

実行結果

$ python3 example.py
co (TAB): continue      compile(    complex(    copyright(
sys.m (TAB): sys.maxsize    sys.maxunicode    sys.meta_path    sys.modules
cal (TAB): callable(

実行結果の解説

実行結果から、次のような補完動作が確認できます。

  • 「co」と入力した場合:continue、compile()、complex()、copyright() など、先頭が「co」で始まる名前が候補として表示されます。
  • 「sys.m」と入力した場合:sys.maxsize、sys.maxunicode、sys.meta_path、sys.modules など、sysモジュール内の「m」で始まる属性が候補になります。
  • 「cal」と入力した場合:組み込み関数の callable() が候補として返されます。

なお、complete()メソッドは state 引数に 0、1、2…と順番に値を渡しながら呼び出すことで、補完候補を1つずつ取得できます。候補がなくなると None が返されるため、これをループの終了条件としている点もポイントです。この仕組みを活用すれば、独自の対話型ツールやカスタムシェルに高機能な補完機能を簡単に組み込むことができます。

  1. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値

  2. Pythonのintersection()関数とは?集合の共通要素(積集合)を求める方法

    この記事では、Pythonのセット(集合)に対して実行できるintersection()関数について詳しく解説します。数学における「積集合(インターセクション)」とは、2つの集合から共通する要素を見つけ出すことを指します。構文<セット名>.intersection(<セットa1>, <セットa2>, …)戻り値引数として渡されたすべての集合に共通する要素(積集合)が、新しいセットとして返されます。使用例set_1 = {t,u,t,o,r,i,a,l} set_2 = {p,o,i,n,t} set_3 = {t,u,t} # 2つの集合の積集合 print