015_Pythonエンジニア認定基礎試験7-5~7

目次

第7章_モジュール

今回の項目では、モジュールについて出題されます。
本試験の主教材である「Python3エンジニア認定基礎試験問題集」では第7章(P100~P101)の3問の内容です。

練習問題 1

次のコードを「メインモジュールとして multiply() 関数を実行したときのみ」その結果を表示させたい場合、空欄①に入る記述として正しいものを選択してください。

def multiply(a, b):
    return a * b

①
  1. print(multiply(3, 4))
  2. if __name__ == “__main__”:
    print(multiply(3, 4))
  3. if __module__ == “__main__”:
    print(multiply(3, 4))
  4. if __main__ == “__name__”:
    print(multiply(3, 4))
答えはコチラをクリック!

答え:2

ポイント
__name__ は Python の特別な変数で、スクリプトが直接実行された場合は “__main__” が代入されますが、他のモジュールからインポートされた場合はそのモジュール名が代入されます。
この仕組みを使って、スクリプトが 直接実行されたときだけ 特定の処理を実行するようにできます。

1. → 不正解。条件なしで常に実行されるので、インポート時にも実行されてしまう。

2. →正解。スクリプトが直接実行された時だけ multiply(3, 4) を実行するので正しい。

3. → 不正解。__module__ という変数は存在しないのでエラーになる。

4. → 不正解。__main__ という変数も存在しないため、エラーになる。

練習問題 2

次のコードが実行可能なとき、 mypackage/__init__.py の内容として正しいものを選択してください。ただし、ディレクトリ構成は以下のとおりで、 utils.py に calculate が定義されているものとします。

【ディレクトリ構成】

mypackage/
    __init__.py
    utils.py  # calculateが定義されている

【実行可能なコード】

from mypackage.utils import calculate
  1. # 空のファイル
  2. import calculate
  3. import utils
  4. from utils import calculate
答えはコチラをクリック!

答え:1

ポイント
from mypackage.utils import calculate が正常に動作するためには、以下の条件が満たされている必要があります。
mypackage/ が パッケージとして認識される こと。
→ __init__ が存在すれば、Python は mypackage をパッケージとして認識します。
utils.py が mypackage
内に存在し、そこに calculate が定義されていること。
→ utils.py に calculate があれば、mypackage.utils というモジュールとして import できます。

1. → 正解。__init__.py は空でもパッケージとして認識されるため、from mypackage.utils import calculate が動作する。

2. → 不正解。caluculate は utils.py にある関数なので、__init__.py で import calculate しても ModuleNotFoundError になる。

3. → 不正解。__init__.py に import utils と書いても、utils は mypackage.utils ではなく、mypackageの外(トップレベル)で utils を探してしまうため、安全ではない。mypacakage.utils を見つけられることもあるが、確実ではない。

4. →不正解。 __init__.py から from utils import calculate とすると、Python は utilsをトップレベルのモジュールとして探そうとする。mypackage.utils を参照するには、from . utils import calculate とすべき。

練習問題 3

パッケージが下記のディレクトリ構成を持つとき、bookcard/load/__init__.py の内容として誤っているものを選択してください。

【ディレクトリ構成】

bookcard/
    __init__.py
    dump.py
    load/
        __init__.py
        core.py
  1. from . import core
  2. from .. import dump
  3. from .dump import *
  4. from ..dump import *
答えはコチラをクリック!

答え:3

ポイント

1. → 不正解。core.py は bookcard/load/ 内にあるので正しくインポートできる。

2. →不正解。dump.py は bookcard/ 内にあり、正しくインポートできる。

3. → 正解。dump.py は bookcard/load/ 内にはなく、エラーになる。

4. → 不正解。dump.py は bookcard/ 内にあり、正しくインポートできる。

確認問題 1

次のコードを「このスクリプトが直接実行された場合のみ」 greet() 関数の結果を表示させたい場合、空欄①に入る記述として正しいものを選択してください。

def greet(name):
    return f"Hello, {name}!"

①
    print(greet("Alice"))

1. if __name__ == “__main__”:

2. if __module__ == “__main__”:

3. if __main__ == “__name__”:

4. if __name__ == “__script__”:

答えはコチラをクリック!

答え:1

__name__ は Python の特別な変数で、スクリプトが直接実行される場合は “__main__” になる。そのため、このスクリプトを直接実行したときのみ “Hello, Alice!” が表示される。モジュールとしてインポートされた場合は実行されない。

確認問題 2

次のコードが 実行可能 なとき、 mypackage/__init__.py の内容として 正しい ものを選択してください。ただし、ディレクトリ構成は以下のとおりで、utils.py に calculate が定義されているものとします。

【ディレクトリ構成】

mypackage/
    __init__.py
    utils.py  # calculateが定義されている

【実行可能なコード】

from mypackage import calculate
  1. # 空のファイル

2. import utils

3. from .utils import calculate

4. from utils import calculate

答えはコチラをクリック!

答え:3

mypackage/__init__.py 内で calculate を mypackage.utils から明示的にインポートしている。これにより mypackage から calculate を直接インポートできるようになるため、from mypackage import calculate が正しく動作する。
もし from mypackage.utils import calculate というコードでインポートする場合は、__init__.py に何も書かなくても問題ありません(選択肢1でもOK)。しかし、今回の問題では from mypackage import calculate という形なので、__init__.py で calculateをエクスポートする必要がある という点がポイントです。

確認問題 3

パッケージが下記のディレクトリ構成を持つとき、bookcard/load/core.py の内容として誤っているものを選択してください。

【ディレクトリ構成】

bookcard/
    __init__.py
    dump.py
    load/
        __init__.py
        core.py

1. from . import __init__

2. from .. import dump

3. from . import core

4. from ..dump import *

答えはコチラをクリック!

答え:1

__init__.py は特別なファイルであり、通常のモジュールのように import することはできない

__init__.py の機能は パッケージの初期化 であり、明示的にインポートすることは一般的ではない。

次回は…

次回は「016_Pythonエンジニア認定基礎試験8-1~4」です。
モジュールについて学びましょう!

参考資料一覧:Python3エンジニア認定[基礎試験]問題集
https://www.pythonic-exam.com
https://data-engineer-japan.com
https://mynavi-agent.jp
https://python-basic.com
https://www.tokai-bs.co.jp
https://freelance.techcareer.jp/articles/wp/skills/python/detail/550/
https://pythonzen-pep8-exam.jp/

目次