Python3エンジニア認定基礎試験 第14章 対話環境での入力行編集とヒストリ置換 予想問題と解説
Python3エンジニア認定基礎試験「第14章 対話環境での入力行編集とヒストリ置換」の予想問題を10問収録しています。各問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。
この章の要点
タブ補完、履歴編集、Readline、対話的インタープリタの代替などを扱う分野です。全10問(基礎5問・標準4問・応用1問)を収録しています。
- タブ補完と履歴編集
- 対話入力編集と履歴置換の概要
- ドット区切り式の補完と__getattr__()の注意
- 対話的インタープリタに残る要望
- 対話的インタープリタの代替(IPython・bpython)
- Tabキーの補完対象と自動有効化
- 行継続時のインデント提示の要望
- Readlineの詳細ドキュメントの扱い
情報源と編集区分
公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。
試験概要(公式)確認しておきたいポイント
当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。
- Tab補完と入力履歴の役割の混同。入力行編集・履歴置換機能をサポートする対話的インタプリタでは、Tabは名前の補完に使い、履歴は既定でユーザーディレクトリの.python_historyへ保存され次回セッションでも利用できる。
よくある質問
Q第14章 対話環境での入力行編集とヒストリ置換は何問収録されていますか?
現在10問を収録しています。内訳は基礎5問・標準4問・応用1問です。
Q第14章 対話環境での入力行編集とヒストリ置換の頻出論点は何ですか?
タブ補完、履歴編集、Readline、対話的インタープリタの代替などが出題対象です(当サイト収録問題に基づく編集部集計)。
Q間違えた問題はどう復習すればいいですか?
誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。
入力行編集・履歴置換機能をサポートするPythonの対話的インタプリタを既定の設定で使った場合、入力履歴の保存と次回利用について公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「履歴はユーザーディレクトリの.python_historyに保存され、次回の対話セッションでも利用できる」である。公式チュートリアル14.1は、入力行編集・履歴置換機能をサポートする対話的インタプリタでは、履歴がデフォルトでユーザーディレクトリの.python_historyファイルに保存され、次回のセッションで利用できると説明している。履歴を実行対象のPythonソースファイルへ追記する仕組みではなく、セッション終了時に必ず破棄されるわけでもない。Tabキーは変数やモジュール名などの補完に使われる。起動時にタブ補完が自動的に有効になり、Tabを押すと文の名前、現在のローカル変数、利用可能なモジュール名を検索するが、履歴の保存を開始するための操作ではない。履歴とタブ補完という2つの対話支援機能の役割を分けて判断する。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)
Pythonの対話的インタプリタが備える入力行編集機能・履歴置換機能について、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「KornシェルやGNU Bashシェルに見られる機能に似ており、様々な編集スタイルをサポートするGNU Readlineライブラリを使って実装されている」である。公式チュートリアル14章は、いくつかのバージョンのPythonインタプリタが、KornシェルやGNU Bashシェルに見られる機能に似た、現在の入力行に対する編集機能や履歴置換機能をサポートしていると説明し、この機能は様々な編集スタイルをサポートするGNU Readlineライブラリを使って実装されていると述べている。「いくつかのバージョン」という限定があるため、すべてのバージョンが必ずサポートするという説明は言い過ぎであり、この機能はPython独自の実装ではなくGNU Readlineライブラリを利用したものである。また対話的インタプリタの機能であり、スクリプトファイルの実行時にのみ働くものではない。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)
string.a のようなドットで区切られた式に対するタブ補完の挙動について、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「最後の'.'までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示す。式に__getattr__()メソッドを持つオブジェクトが含まれる場合、補完操作がアプリケーション定義のコードを実行することがある」である。公式チュートリアルは、string.aのようなドットで区切られた式について、最後の'.'までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示すと説明している。そのうえで、__getattr__()メソッドを持ったオブジェクトが式に含まれている場合、アプリケーション定義のコードを実行するかもしれないと注意しており、補完操作自体が副作用を持ちうる点を示している。したがって、式が評価されず見た目だけで補完候補が決まるという説明や、__getattr__()があってもコードが実行されることは一切ないという説明、補完候補がモジュール名だけに限られるという説明は、いずれも公式の記載と異なる。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)
公式チュートリアルが対話的インタプリタに残る要望として挙げているものの組み合わせはどれか。
答えと解説を見る
正解は「行継続時の正しいインデントの提示、補完機構によるシンボルテーブルの利用、括弧やクォートなどの対応チェック」である。公式チュートリアルは対話的インタプリタに残る要望として、行継続時の正しいインデント提示、補完機構によるシンボルテーブルの利用、括弧やクォートなどの対応チェックを挙げている。起動速度やメモリ使用量に関する要望、Tab補完や履歴機能・対話的インタプリタ自体の廃止、GUIツールキットやネットワーク機能・暗号化通信に関する要望は、公式チュートリアルがこの文脈で挙げている内容ではない。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)
公式チュートリアルが紹介している対話的インタプリタの代替環境について、説明に合うものはどれか。
答えと解説を見る
正解は「IPythonはタブ補完・オブジェクト探索・先進的な履歴管理といった機能を持ち、カスタマイズや他のアプリケーションへの組込みも可能。bpythonも別の優れたインタラクティブ環境として紹介されている」である。公式チュートリアルは、IPythonが様々なところで使われており、タブ補完・オブジェクト探索・先進的な履歴管理といった機能を持ち、カスタマイズや他のアプリケーションへの組込みも可能だと説明している。またbpythonについても、別の優れたインタラクティブ環境として紹介している。標準ライブラリに含まれるという説明や、bpythonがタブ補完機能を持たないという説明、代替環境に一切触れていないという説明は、公式チュートリアルの記載とは異なる。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)
Pythonの対話的インタプリタでTabキーを押したとき、補完の候補として検索される対象について、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「Pythonの文の名前、現在のローカル変数、利用可能なモジュール名」である。公式チュートリアル14.1は、変数とモジュール名の補完がインタプリタの起動時に自動的に有効化されるため、Tabキーが補完機能を呼び出し、Pythonの文の名前、現在のローカル変数、および利用可能なモジュール名を検索すると説明している。ファイル名の補完や、直前の1行の呼び出しは、この説明に含まれていない。PyPIで公開されているパッケージ名を検索するという説明もなく、補完されるのはインタプリタが把握している名前である。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.1 タブ補完と履歴編集)
対話的インタプリタの変数とモジュール名の補完が有効になるタイミングについて、公式チュートリアルの説明に合うものはどれか。
答えと解説を見る
正解は「インタプリタの起動時に自動的に有効化される」である。公式チュートリアル14.1は、変数とモジュール名の補完がインタプリタの起動時に自動的に有効化されると説明し、従ってTabキーが補完機能を呼び出すと続けている。利用者が補完の有効化の操作を行う必要はなく、特別なキー操作や、履歴の保存を待つ必要もない。なお、この機能は入力行編集・履歴置換機能をサポートするバージョンのインタプリタの話であり、履歴は既定でユーザーディレクトリの.python_historyに保存されて次回のセッションで再び利用できるが、これは補完の有効化のタイミングとは別の説明である。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.1 タブ補完と履歴編集)
公式チュートリアルは、対話的インタープリタで行を継続するとき正しいインデントが提示されたら快適だと述べ、その実現が見込める理由を挙げている。その理由として合うものはどれか。
答えと解説を見る
正解は「パーサは次の行でINDENTトークンが必要かどうかを知っているから」である。公式チュートリアル14.2は、まだ残っている要望の例として、行を継続するときに正しいインデントが提示されたら快適だとし、その理由としてパーサは次の行でINDENTトークンが必要かどうかを知っていると述べている。補完機構がシンボルテーブルを使ってもよいかもしれないというのは別の要望であり、すでに実現済みという説明ではない。エディタの設定の読み込みや、履歴ファイルのインデント情報についての説明もない。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.2 対話的インタープリタの代替)
入力行編集機能を実装しているGNU Readlineライブラリの詳しい使い方について、公式チュートリアル第14章の扱いとして合うものはどれか。
答えと解説を見る
正解は「このライブラリには独自のドキュメントがあるため、チュートリアルではそれを繰り返さない」である。公式チュートリアル第14章は、入力行編集・履歴置換機能が様々な編集スタイルをサポートするGNU Readlineライブラリを使って実装されていると説明したうえで、このライブラリには独自のドキュメントがあり、ここでそれを繰り返すつもりはないと述べている。したがって、全コマンドの一覧を本文に載せているわけではない。ライブラリの存在自体は説明しており、一切触れていないわけでもない。キー設定の例を示して編集スタイルの違いを説明するという記述もない。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話入力編集と履歴置換)
対話的インタプリタで os.pa と入力してTabキーを押した。公式チュートリアルの説明に沿った動作はどれか。
答えと解説を見る
正解は「最後の「.」までの式 os を評価し、得られたオブジェクトの属性から補完候補を示す」である。公式チュートリアル14.1は、string.aのようなドットで区切られた式については、最後の「.」までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示すと説明している。os.paなら、式osを評価して得たオブジェクトの属性(paで始まるもの)が候補になる。式全体を変数名として探すのではなく、モジュール名だけに限られるのでもない。履歴だけから候補を作るのでもなく、式を評価する点が特徴である。なお、式に__getattr__()メソッドを持つオブジェクトが含まれると、アプリケーション定義のコードが実行されるかもしれない点には注意が必要である。
https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.1 タブ補完と履歴編集)