AI資格ドリル
資格を選ぶ

Python3エンジニア認定基礎試験 第14章 対話環境での入力行編集とヒストリ置換 予想問題と解説

Python3エンジニア認定基礎試験「第14章 対話環境での入力行編集とヒストリ置換」の予想問題を10問収録しています。各問を解説つきで掲載し、全問は演習画面で解けます。出題は公式シラバスの範囲内です。

この章の要点

タブ補完、履歴編集、Readline、対話的インタープリタの代替などを扱う分野です。全10問(基礎5問・標準4問・応用1問)を収録しています。

  • タブ補完と履歴編集
  • 対話入力編集と履歴置換の概要
  • ドット区切り式の補完と__getattr__()の注意
  • 対話的インタープリタに残る要望
  • 対話的インタープリタの代替(IPython・bpython)
  • Tabキーの補完対象と自動有効化
  • 行継続時のインデント提示の要望
  • Readlineの詳細ドキュメントの扱い

情報源と編集区分

公式範囲を確認し、問題数・難易度・確認点は当サイトが集計・編集。

試験概要(公式)

確認しておきたいポイント

当サイトの作問時に観察した、取り違えやすい論点です(公式の統計ではありません)。

  • Tab補完と入力履歴の役割の混同。入力行編集・履歴置換機能をサポートする対話的インタプリタでは、Tabは名前の補完に使い、履歴は既定でユーザーディレクトリの.python_historyへ保存され次回セッションでも利用できる。

よくある質問

Q第14章 対話環境での入力行編集とヒストリ置換は何問収録されていますか?

A

現在10問を収録しています。内訳は基礎5問・標準4問・応用1問です。

Q第14章 対話環境での入力行編集とヒストリ置換の頻出論点は何ですか?

A

タブ補完、履歴編集、Readline、対話的インタープリタの代替などが出題対象です(当サイト収録問題に基づく編集部集計)。

Q間違えた問題はどう復習すればいいですか?

A

誤答した選択肢のどこがずれていたかを解説で確認し、関連用語がある場合は用語集で定義に戻ってから再演習することをおすすめします。

第1問 ・ タブ補完と履歴編集

入力行編集・履歴置換機能をサポートするPythonの対話的インタプリタを既定の設定で使った場合、入力履歴の保存と次回利用について公式チュートリアルの説明に合うものはどれか。

  • ア履歴は実行したPythonソースファイルの末尾へ自動追記され、次回はそのファイルから読み込まれる
  • イ履歴はセッション終了時に必ず破棄されるため、次回の対話セッションでは利用できない
  • ウ履歴を保存するには、毎回Tabキーを押してから対話的インタプリタを終了する必要がある
  • エ履歴はユーザーディレクトリの.python_historyに保存され、次回の対話セッションでも利用できる
答えと解説を見る
エ履歴はユーザーディレクトリの.python_historyに保存され、次回の対話セッションでも利用できる正解
解説

正解は「履歴はユーザーディレクトリの.python_historyに保存され、次回の対話セッションでも利用できる」である。公式チュートリアル14.1は、入力行編集・履歴置換機能をサポートする対話的インタプリタでは、履歴がデフォルトでユーザーディレクトリの.python_historyファイルに保存され、次回のセッションで利用できると説明している。履歴を実行対象のPythonソースファイルへ追記する仕組みではなく、セッション終了時に必ず破棄されるわけでもない。Tabキーは変数やモジュール名などの補完に使われる。起動時にタブ補完が自動的に有効になり、Tabを押すと文の名前、現在のローカル変数、利用可能なモジュール名を検索するが、履歴の保存を開始するための操作ではない。履歴とタブ補完という2つの対話支援機能の役割を分けて判断する。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)

問題番号: py3b-047
問題番号 py3b-047 の誤りを報告する
第2問 ・ 対話入力編集と履歴置換の概要

Pythonの対話的インタプリタが備える入力行編集機能・履歴置換機能について、公式チュートリアルの説明に合うものはどれか。

  • アこの機能はPython独自に開発されたもので、他のシェルの編集機能とは無関係に実装されている
  • イすべてのバージョンのPythonインタプリタが必ずこの機能をサポートしている
  • ウこの機能は対話的インタプリタではなく、スクリプトファイルの実行時にのみ働く
  • エKornシェルやGNU Bashシェルに見られる機能に似ており、様々な編集スタイルをサポートするGNU Readlineライブラリを使って実装されている
答えと解説を見る
エKornシェルやGNU Bashシェルに見られる機能に似ており、様々な編集スタイルをサポートするGNU Readlineライブラリを使って実装されている正解
解説

正解は「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章 対話環境での入力行編集とヒストリ置換)

問題番号: py3b-079
問題番号 py3b-079 の誤りを報告する
第3問 ・ ドット区切り式の補完と__getattr__()の注意

string.a のようなドットで区切られた式に対するタブ補完の挙動について、公式チュートリアルの説明に合うものはどれか。

  • アドットで区切られた式は評価されず、文字列としての見た目だけから補完候補を推測する
  • イ最後の'.'までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示す。式に__getattr__()メソッドを持つオブジェクトが含まれる場合、補完操作がアプリケーション定義のコードを実行することがある
  • ウ__getattr__()メソッドを持つオブジェクトが式に含まれていても、補完操作でコードが実行されることは一切ない
  • エ補完候補は常にモジュールの名前だけに限られ、オブジェクトの属性は補完候補にならない
答えと解説を見る
イ最後の'.'までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示す。式に__getattr__()メソッドを持つオブジェクトが含まれる場合、補完操作がアプリケーション定義のコードを実行することがある正解
解説

正解は「最後の'.'までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示す。式に__getattr__()メソッドを持つオブジェクトが含まれる場合、補完操作がアプリケーション定義のコードを実行することがある」である。公式チュートリアルは、string.aのようなドットで区切られた式について、最後の'.'までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示すと説明している。そのうえで、__getattr__()メソッドを持ったオブジェクトが式に含まれている場合、アプリケーション定義のコードを実行するかもしれないと注意しており、補完操作自体が副作用を持ちうる点を示している。したがって、式が評価されず見た目だけで補完候補が決まるという説明や、__getattr__()があってもコードが実行されることは一切ないという説明、補完候補がモジュール名だけに限られるという説明は、いずれも公式の記載と異なる。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)

問題番号: py3b-080
問題番号 py3b-080 の誤りを報告する
第4問 ・ 対話的インタープリタに残る要望

公式チュートリアルが対話的インタプリタに残る要望として挙げているものの組み合わせはどれか。

  • ア対話的インタプリタの起動速度の向上、標準モジュールの読み込み時間の短縮、メモリ使用量の削減
  • イGUIツールキットの標準搭載、ネットワーク機能の強化、暗号化通信への対応
  • ウ行継続時の正しいインデントの提示、補完機構によるシンボルテーブルの利用、括弧やクォートなどの対応チェック
  • エTab補完の廃止、履歴機能の廃止、対話的インタプリタ自体の廃止
答えと解説を見る
ウ行継続時の正しいインデントの提示、補完機構によるシンボルテーブルの利用、括弧やクォートなどの対応チェック正解
解説

正解は「行継続時の正しいインデントの提示、補完機構によるシンボルテーブルの利用、括弧やクォートなどの対応チェック」である。公式チュートリアルは対話的インタプリタに残る要望として、行継続時の正しいインデント提示、補完機構によるシンボルテーブルの利用、括弧やクォートなどの対応チェックを挙げている。起動速度やメモリ使用量に関する要望、Tab補完や履歴機能・対話的インタプリタ自体の廃止、GUIツールキットやネットワーク機能・暗号化通信に関する要望は、公式チュートリアルがこの文脈で挙げている内容ではない。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)

問題番号: py3b-081
問題番号 py3b-081 の誤りを報告する
第5問 ・ 対話的インタープリタの代替(IPython・bpython)

公式チュートリアルが紹介している対話的インタプリタの代替環境について、説明に合うものはどれか。

  • アIPythonはタブ補完・オブジェクト探索・先進的な履歴管理といった機能を持ち、カスタマイズや他のアプリケーションへの組込みも可能。bpythonも別の優れたインタラクティブ環境として紹介されている
  • イIPythonとbpythonはいずれも標準ライブラリに含まれており、追加のインストールなしに利用できる
  • ウbpythonはタブ補完機能を持たない代わりに、IPythonにはない機能を持つと公式チュートリアルは説明している
  • エ公式チュートリアルは対話的インタプリタの代替環境について一切触れていない
答えと解説を見る
アIPythonはタブ補完・オブジェクト探索・先進的な履歴管理といった機能を持ち、カスタマイズや他のアプリケーションへの組込みも可能。bpythonも別の優れたインタラクティブ環境として紹介されている正解
解説

正解は「IPythonはタブ補完・オブジェクト探索・先進的な履歴管理といった機能を持ち、カスタマイズや他のアプリケーションへの組込みも可能。bpythonも別の優れたインタラクティブ環境として紹介されている」である。公式チュートリアルは、IPythonが様々なところで使われており、タブ補完・オブジェクト探索・先進的な履歴管理といった機能を持ち、カスタマイズや他のアプリケーションへの組込みも可能だと説明している。またbpythonについても、別の優れたインタラクティブ環境として紹介している。標準ライブラリに含まれるという説明や、bpythonがタブ補完機能を持たないという説明、代替環境に一切触れていないという説明は、公式チュートリアルの記載とは異なる。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話環境での入力行編集とヒストリ置換)

問題番号: py3b-082
問題番号 py3b-082 の誤りを報告する
第6問 ・ Tabキーの補完対象と自動有効化

Pythonの対話的インタプリタでTabキーを押したとき、補完の候補として検索される対象について、公式チュートリアルの説明に合うものはどれか。

  • アファイルシステム上のすべてのファイル名とディレクトリ名だけ
  • イ過去に入力したすべての行のうち、直前の1行だけ
  • ウPyPIで公開されているすべてのパッケージ名
  • エPythonの文の名前、現在のローカル変数、利用可能なモジュール名
答えと解説を見る
エPythonの文の名前、現在のローカル変数、利用可能なモジュール名正解
解説

正解は「Pythonの文の名前、現在のローカル変数、利用可能なモジュール名」である。公式チュートリアル14.1は、変数とモジュール名の補完がインタプリタの起動時に自動的に有効化されるため、Tabキーが補完機能を呼び出し、Pythonの文の名前、現在のローカル変数、および利用可能なモジュール名を検索すると説明している。ファイル名の補完や、直前の1行の呼び出しは、この説明に含まれていない。PyPIで公開されているパッケージ名を検索するという説明もなく、補完されるのはインタプリタが把握している名前である。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.1 タブ補完と履歴編集)

問題番号: py3b-170
問題番号 py3b-170 の誤りを報告する
第7問 ・ Tabキーの補完対象と自動有効化

対話的インタプリタの変数とモジュール名の補完が有効になるタイミングについて、公式チュートリアルの説明に合うものはどれか。

  • アインタプリタの起動時に自動的に有効化される
  • イ利用者がimport readlineを入力した時点で初めて有効になる
  • ウ最初にTabキーを3回続けて押した時点で有効になる
  • エ対話セッションを終了して履歴を保存した後の次回起動時に有効になる
答えと解説を見る
アインタプリタの起動時に自動的に有効化される正解
解説

正解は「インタプリタの起動時に自動的に有効化される」である。公式チュートリアル14.1は、変数とモジュール名の補完がインタプリタの起動時に自動的に有効化されると説明し、従ってTabキーが補完機能を呼び出すと続けている。利用者が補完の有効化の操作を行う必要はなく、特別なキー操作や、履歴の保存を待つ必要もない。なお、この機能は入力行編集・履歴置換機能をサポートするバージョンのインタプリタの話であり、履歴は既定でユーザーディレクトリの.python_historyに保存されて次回のセッションで再び利用できるが、これは補完の有効化のタイミングとは別の説明である。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.1 タブ補完と履歴編集)

問題番号: py3b-171
問題番号 py3b-171 の誤りを報告する
第8問 ・ 行継続時のインデント提示の要望

公式チュートリアルは、対話的インタープリタで行を継続するとき正しいインデントが提示されたら快適だと述べ、その実現が見込める理由を挙げている。その理由として合うものはどれか。

  • アパーサは次の行でINDENTトークンが必要かどうかを知っているから
  • イインタープリタは起動時に利用者のエディタの設定を読み込んでいるから
  • ウ補完機構がすでにシンボルテーブルを使って次の行を予測しているから
  • エ履歴ファイル.python_historyに過去のインデント幅が記録されているから
答えと解説を見る
アパーサは次の行でINDENTトークンが必要かどうかを知っているから正解
解説

正解は「パーサは次の行でINDENTトークンが必要かどうかを知っているから」である。公式チュートリアル14.2は、まだ残っている要望の例として、行を継続するときに正しいインデントが提示されたら快適だとし、その理由としてパーサは次の行でINDENTトークンが必要かどうかを知っていると述べている。補完機構がシンボルテーブルを使ってもよいかもしれないというのは別の要望であり、すでに実現済みという説明ではない。エディタの設定の読み込みや、履歴ファイルのインデント情報についての説明もない。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.2 対話的インタープリタの代替)

問題番号: py3b-172
問題番号 py3b-172 の誤りを報告する
第9問 ・ Readlineの詳細ドキュメントの扱い

入力行編集機能を実装しているGNU Readlineライブラリの詳しい使い方について、公式チュートリアル第14章の扱いとして合うものはどれか。

  • アライブラリの全コマンドを第14章の本文で一覧にして説明している
  • イこのライブラリには独自のドキュメントがあるため、チュートリアルではそれを繰り返さない
  • ウライブラリはPythonの標準配布物に含まれないため、一切説明していない
  • エライブラリのキー設定の例だけを示し、編集スタイルの違いは説明している
答えと解説を見る
イこのライブラリには独自のドキュメントがあるため、チュートリアルではそれを繰り返さない正解
解説

正解は「このライブラリには独自のドキュメントがあるため、チュートリアルではそれを繰り返さない」である。公式チュートリアル第14章は、入力行編集・履歴置換機能が様々な編集スタイルをサポートするGNU Readlineライブラリを使って実装されていると説明したうえで、このライブラリには独自のドキュメントがあり、ここでそれを繰り返すつもりはないと述べている。したがって、全コマンドの一覧を本文に載せているわけではない。ライブラリの存在自体は説明しており、一切触れていないわけでもない。キー設定の例を示して編集スタイルの違いを説明するという記述もない。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 第14章 対話入力編集と履歴置換)

問題番号: py3b-173
問題番号 py3b-173 の誤りを報告する
第10問 ・ ドット区切り式の補完と__getattr__()の注意

対話的インタプリタで os.pa と入力してTabキーを押した。公式チュートリアルの説明に沿った動作はどれか。

  • ア最後の「.」までの式 os を評価し、得られたオブジェクトの属性から補完候補を示す
  • イos.pa という文字列全体を変数名として探し、見つからなければ何も起こらない
  • ウ利用可能なモジュール名のうち、先頭が pa のものだけを候補にする
  • エ式は評価せず、過去の履歴から os.pa で始まる行だけを候補にする
答えと解説を見る
ア最後の「.」までの式 os を評価し、得られたオブジェクトの属性から補完候補を示す正解
解説

正解は「最後の「.」までの式 os を評価し、得られたオブジェクトの属性から補完候補を示す」である。公式チュートリアル14.1は、string.aのようなドットで区切られた式については、最後の「.」までの式を評価し、結果として得られたオブジェクトの属性から補完候補を示すと説明している。os.paなら、式osを評価して得たオブジェクトの属性(paで始まるもの)が候補になる。式全体を変数名として探すのではなく、モジュール名だけに限られるのでもない。履歴だけから候補を作るのでもなく、式を評価する点が特徴である。なお、式に__getattr__()メソッドを持つオブジェクトが含まれると、アプリケーション定義のコードが実行されるかもしれない点には注意が必要である。

https://docs.python.org/ja/3/tutorial/interactive.html (Python公式チュートリアル 14.1 タブ補完と履歴編集)

問題番号: py3b-174
問題番号 py3b-174 の誤りを報告する

執筆: AI資格ドリル編集部(運営者情報を見る)