第186問ディクショナリの内包表記において、キーを計算式にしたコード d = {x**2: x**3 for x in (1, 3, 6)} を実行して print(d) とした結果として適切なものはどれですか。
- A{1: 1, 3: 9, 6: 36}
- B{1: 1, 3: 27, 6: 216}
- C{1: 1, 9: 3, 36: 6}
- D{1: 1, 9: 27, 36: 216}
プログラムを複数ファイルに分割して再利用するモジュールの仕組みと、ファイルの読み書きを学ぶ分野です。importとfrom~import、asによる別名指定、from~import *で読み込まれる名前と__all__属性の関係が頻出です。誤ったインポート記述で起きるImportErrorやModuleNotFoundError、calendarなど標準ライブラリの呼び出し方も問われます。あわせてリスト内包表記の応用も出題されます。インポートの書式ごとに「何が使えるようになるか」を正確に区別できるように整理しておきましょう。出題数36問。
この分野の問題36問を、選択肢・正解・解説つきで掲載しています。まず自分で解答を考えてから「正解と解説を見る」を開いて答え合わせをしてください。
クイズモードで挑戦 →正解:B.import calendar\ncalendar.prmonth(2000, 1)
モジュール内の関数を実行するには、まずモジュールをインポートし、モジュール名.関数名()の形式で呼び出します。
この問題の解説ページを開く →正解:D.ModuleNotFoundError
prmonthはモジュールではないため、このような記述でインポートしようとするとModuleNotFoundErrorになります。
この問題の解説ページを開く →正解:B.calendarはモジュールであり関数ではないため
インポートしたcalendarはモジュールオブジェクトであるため、そのまま関数のように呼び出すことはできません。
この問題の解説ページを開く →正解:B.from calc import add
モジュールに含まれる特定の関数のみをインポートする場合、from モジュール名 import 関数名 という書式を使用します。
この問題の解説ページを開く →正解:A.addという名前のモジュールが存在しないためModuleNotFoundErrorになる
addはモジュール名ではなく関数名であるため、fromの後に指定するとModuleNotFoundErrorになります。
この問題の解説ページを開く →正解:D.calcモジュール内のアンダースコア「_」で始まらない名前
__all__属性が存在しない場合、アスタリスクを用いたインポートではアンダースコアで始まる名前以外のすべての名前が使えます。
この問題の解説ページを開く →正解:C.モジュール名自体はインポートされないため使用できない
from モジュール名 import * の形式では、モジュール内の名前はインポートされますが、モジュール名自体はインポートされません。
この問題の解説ページを開く →正解:A.__all__というリスト内の名前だけがインポートされる
モジュールに__all__属性が存在する場合、そのリスト内に指定されている名前だけがインポートの対象となります。
この問題の解説ページを開く →正解:D.別名を定義したためNameError(またはエラー)になる
別名calを指定してインポートした場合、元のモジュール名であるcalendarという名前は使用できなくなります。
この問題の解説ページを開く →正解:D.from calendar import calendar as cal
関数を別名でインポートする場合、from モジュール名 import 関数名 as 関数の別名 という書式を使用します。
この問題の解説ページを開く →正解:A.calendarという名前のモジュールはインポートされていないためエラーになる
この形式でインポートした場合、関数は別名calとしてインポートされますが、calendarというモジュール自体はインポートされません。
この問題の解説ページを開く →正解:B.関数の別名として「calendar」が使われcalendar()関数が正しく実行される
関数の別名としてモジュールと同じ名前(calendar)を指定することは可能であり、その名前で関数が実行できます。
この問題の解説ページを開く →正解:C.package_name/__init__.py
パッケージをインポートすると、そのパッケージのディレクトリ内にある__init__.pyファイルの内容が読み込まれます。
この問題の解説ページを開く →正解:A.通常のモジュールとは異なるためインポート時にエラーになる
__init__.py内では、通常のモジュールのようにサブモジュールをそのまま import dump などの形で記述することはできず、エラーになります。
この問題の解説ページを開く →正解:C.from ..dump import 名前
1つ上の階層の別サブモジュールから名前をインポートする書式は、from ..サブモジュール名 import 名前 となります。
この問題の解説ページを開く →正解:B.ビルトインモジュール → sys.pathに入っているパス
インポート時にモジュールを調べる順番は、最初にビルトインモジュール、次にsys.pathに入っているパスの順になります。
この問題の解説ページを開く →正解:A.実行ファイルのディレクトリや標準ライブラリの場所など
sys.pathは変更可能ですが、通常は実行ファイルのディレクトリや標準ライブラリの場所などが入っています。
この問題の解説ページを開く →正解:A.ファイルの閉じ処理(クローズ)が自動で行われ例外発生時にも実行される
with文を使うことで、ファイルの処理後に閉じる処理(close()メソッドの呼び出し)が自動で行われ、これは例外発生時にも適用されます。
この問題の解説ページを開く →