数弱の文系大学生によるブログです。

Python、Webデザイン関連の記事を投稿していけたらなと思っています。

備忘録的なブログなので、読みにくい文章だと思います。ご了承ください。

Python3の復習(モジュール・パッケージ)

こんにちは。

かにたまごです。


今回は

  • モジュール
  • パッケージ

について、復習していきたいと思います。
短い記事になりそうです。


今までのPython3 復習履歴は以下の通り。

  1. 数値・文字列
  2. リスト・タプル
  3. 辞書・集合
  4. if文・while文・for文
  5. 内包表記
  6. 関数
  7. ジェネレータ
  8. デコレータ
  9. 名前空間とスコープ
  10. アンダーバー・アンダースコアの意味
  11. エラー処理:try・except

モジュール

モジュールとは、Pythonコードをまとめたファイルのこと。
こちらの記事によると、複数のモジュールが集まるとパッケージと呼ばれ、パッケージ内には必ず__init__.pyが含まれているそう。
ライブラリに関しては厳密な定義がないらしい。とりあえずライブラリって言っておけばOKなのかな。

コマンドラインからファイルを実行する際に渡すことのできるパラメータのこと。
sysモジュールをインポートすると、インタプリタに関する変数や関数を使用できるようになる。

sys — システムパラメータと関数

最初のインデックスにファイル名が入っている。

import sys
print("filename: ", sys.argv[0])
print("other argments: ", sys.argv[1:])
C:\Users\***\Desktop\Python\Test>blog_test.py val1 val2 val3 val4
filename:  C:\Users\***\Desktop\Python\Test\blog_test.py
other argments:  ['val1', 'val2', 'val3', 'val4']
  • モジュールのインポート

同じ階層に作成したrandomChoice.pyというモジュールをインポートして使用してみる。

#randomChoice.py
def today_fortune():
    from random import choice
    fortune = ["大吉", "中吉", "小吉", "吉", "末吉", "凶", "大凶"]
    return choice(fortune)
#blog_test.py
import randomChoice
result = randomChoice.today_fortune()
print("今日の運勢は", result, "です")

出力結果。

C:\Users\***\Desktop\Python\Test>blog_test.py
今日の運勢は 凶 です

モジュールが複数の場所で使用される場合は、関数の外でインポートする。
使用される場所が限定されている場合(今回の例みたいに)は、関数の中でインポートしても良い。

asで名前を省略したり、覚えやすい名前を付けることができる。

import randomChoice as rc
result = rc.today_fortune()
print("今日の運勢は", result, "です")
C:\Users\***\Desktop\Python\Test>blog_test.py
今日の運勢は 中吉 です

モジュール内の必要なものだけをインポートすることもできる。

#randomChoice.py
FILENAME = "randomChoice.py"

def today_fortune():
    from random import choice
    fortune = ["大吉", "中吉", "小吉", "吉", "末吉", "凶", "大凶"]
    return choice(fortune)
#blog_test.py
from randomChoice import today_fortune, FILENAME
result = today_fortune()
print("ファイル名は", FILENAME)
print("今日の運勢は", result, "です")

出力結果。

C:\Users\***\Desktop\Python\Test>blog_test.py
ファイル名は randomChoice.py
今日の運勢は 末吉 です

パッケージ

パッケージは複数のモジュールで構成される。

│  blog_test.py
│  new_test.py
├─randomChoices
│      randomTodayChoice.py
│      randomYearChoice.py
#randomTodayChoice.py
FILENAME = "randomTodayChoice.py"

def today_fortune():
    from random import choice
    fortune = ["大吉", "中吉", "小吉", "吉", "末吉", "凶", "大凶"]
    return choice(fortune)
#randomYearChoice.py
FILEMAME = "randomYearChoice.py"

def year_fortune():
    from random import choice
    fortune = ["大吉", "中吉", "小吉", "吉", "末吉", "凶", "大凶"]
    return choice(fortune)
#blog_test.py
from randomChoices import randomTodayChoice, randomYearChoice
today_result = randomTodayChoice.today_fortune()
year_result = randomYearChoice.year_fortune()
print("今日の運勢は", today_result, "です")
print("今年の運勢は", year_result, "です")

もう一つ、ディレクトリ内に__init__.pyというファイルを追加する必要がある。
このファイルを置くことで、ディレクトリがパッケージとして扱われる。

#__init__.py
#中身は空でよい

最終的なフォルダ構成

├─randomChoices
│  │  randomTodayChoice.py
│  │  randomYearChoice.py
│  │  __init__.py

出力結果。

C:\Users\***\Desktop\Python\Test>python blog_test.py
今日の運勢は 大凶 です
今年の運勢は 大吉 です


色々呼び方があってややこしい・・・。
でもこういうのに慣れていかないと今後厳しそう(;^ω^)


以上です。


参考にさせていただいたサイト:

Pythonのパッケージとモジュールの違い