Python学習【365日チャレンジ!】66日目のマスターU(@Udemy11)です。
昨日までは、制御フローやコードの構造に関するセクションを学習していましたが、今日から新しいセクションの【モジュールとパッケージ】に入ります。
ほんとこういうところは、具体的にどのようにつかうのかイメージできないまま学習していると嫌気がさしてくるないようなんですよね。
一つ一つが重要なのはわかるのですが、気持ち的には早く具体的な使い方が知りたくなります。
ただ、目的もなく一からPythonを学習するとこのあたりで挫折してしまうと思うんです。
なので、余裕があるのなら、なにか作りながら基礎を学習したほうがモチベーションを継続できるかもしれません。
わたしの場合は、ある意味自分のための辞書用という意味合いも含めてこのPython学習【365日チャレンジ!】を記事にしているので、モチベーションをキープしつつ、毎日楽しくPython学習を継続できています。
それでは、今日もPython学習をすすめていきましょう!
昨日の復習
昨日は、ユーザー定義例外を学習しました。
プログラムの開発をすすめる上で、組み込み例外ではなく、独自の例外を作りたいときに役立つのがユーザー定義例外でした。
Exception
の中にユーザー定義の例外を作成し、raise
文でエラーを呼び出しました。
class UpperError(Exception):
pass
def check_word():
words = ['Apple watch', 'Apple TV', 'AIRMAC']
for word in words:
if word.isupper():
raise UpperError(word)
try:
check_word()
except UpperError as exc:
print("It's my Exception : {}".format(exc))
else:
print('Done')
出力結果
It's my Exception : AIRMAC
組み込み例外の処理と組み合わせて使えば、結構プログラミングっぽくなってきた感じがしました。
詳しくは昨日のエントリーをご覧になってください。
それでは今日のPython学習にはいりましょう!
モジュールとパッケージ
モジュール(module)って言葉を聞くと、プログラミングっぽい感じがするのは私だけでしょうか?
これまでは、Pythonの基本から、データ構造や制御フローやコード構造について学習してきたので、一つ一つの部品をみてきた感じです。
これからは、その部品を組み合わせた部品であるモジュールをさらに詰め込んだパッケージの使い方を学習していきますが、その前に、パッケージとモジュールを簡単に理解しておきましょう
関数やクラスを記述したPythonファイル(.py
)がモジュールで、そのモジュールをまとめたものがパッケージ、そして、パッケージをまとめてインストールして使えるようにしたものがライブラリです。(基本、標準ライブラリはモジュール)
イメージ的には次のような感じです。
ライブラリはまだ学習していませんが、はじめの頃にちらっと学習したmath
やpandas
、matplotlib
などのサードパーティーライブラリの名前を目にしたことはあるかと思います。
文房具に例えるなら、鉛筆や消しゴムがモジュールで、筆箱がパッケージ、習字セットやノートや筆箱が入ったランドセルがライブラリといったところでしょうか。
Pythonistaでモジュール操作
酒井さんの講座では、Pycharmを使って解説していますが、もちろんPythonistaでも同じ操作が可能です。
今回は、パッケージ内のモジュールをパケージ外のモジュールから読み込んで操作しますが、その行程は次のとおり
session
フォルダを作り、その中にlesson.py
とlesson_package
フォルダを作るlesson_package
ディレクトリの中にutils.py
と__int__.py
を作成するutils.py
に関数say_word
を定義するlesson.py
からutils.py
をインポートしてsay_word
を実行する
一連の流れはこのような感じです。
ディレクトリの階層はこのようになっています。
session ┳ lesson.py
┗ lesson_package ┳ utils.py
┗ __int__.py
まずは、session
フォルダを作ってその中にlesson.py
とlesson_package
を作ります。
Pythonistaのホーム画面左下の【+】をタップして、新規フォルダとスクリプトを作成します。
まずは、session
フォルダを作成した後、その中にフォルダとスクリプトを作成します。
同じようにlesson_package
フォルダの中にutils.py
と__int__.py
を作成します。
これで準備が完了です。
ちなみに、__int__.py
は、パッケージ内のモジュールを読み込むときに最初に読み込まれるファイルで、中身は何もなくても必ず作成する必要があります。
utils.pyのコード
lesson.py
からlesson_package
内のutils.py
を読み込みますので、まずは、utils.py
のコードを書きます。
utils.py
def say_word(word):
return (word + '!' ) * 2
引数word
に!
をつけて、2回繰り返す値を返り値にしています。
lesson.pyからutils.pyを読み込む
次に、lesson.py
から同じ階層にあるlesson_package
内のutils.py
を読み込んで関数say_word
を実行して値を取得、出力します。
lesson.py<
import lesson_package.utils
r = lesson_package.utils.say_word('Hello')
print(r)
出力結果
Hello!Hello!
イメージとしては、よく使う動作をモジュールにして、使い回すという感じです。
数学で言うところの公式みたいなものですね。
数学の公式は、普遍な計算をより早くできるように簡略化してわかりやすくしたものなので、公式を使うことで時間を短縮することができます。
同じように、モジュールも決まった動作をさせるパッケージを用意することで、いちいちコードを書く必要をなくしているわけです。
fromでコードを短く
import
を使うとモジュールを読み込めるわけですが、モジュール内の関数を使うときはコードが長くなってしまいます。
そんなコードを短くできるのがfrom
を使ったモジュールの読み込みです。
#import lesson_package.utilsの代わりに下のコードを使う
from lesson_package import utils
r = utils.say_word('Hello')
print(r)
出力結果
Hello!Hello!
from
を使うことで、関数を呼び出すときにパッケージ名を省略することができます。
さらに、from
のあとに.utils
を加えた場合、関数名say_word
だけで関数を実行できるようになります。
from lesson_package.utils import say_word
r = say_word('Hello')
print(r)
ただ、この書き方になると、どこのモジュールのsay_word
なのかわからなくなるので、from
を使うときは、パッケージ名までにしておいたほうがいいとのことです。
asでコードを短く
さらに便利なのが、as
を使ったやり方です。
import lesson_package.utils as ut
r = ut.say_word('Hello')
print(r)
lesson_package.utils
をut
に代入しているようなものなので、utils.py
内の関数say_word
を実行するには、ut.say_word
だけで実行できるようになります。
ただ、このas
を使う場合も、省略しすぎると、自分以外の人にはどのモジュールを使っているのかわかりづらくなるので、使うときは注意が必要です。
プログラムの醍醐味
他のモジュールやライブラリの読み込みは、プログラムの醍醐味と言えるところです。
Pythonの場合、標準ライブラリが充実していて、最初から使える便利なモジュールがたくさんあることが魅力の一つです。
この文言は、Pythonの特徴としてよく目にするのですが、これまではあまり意味がわかっていませんでしたが今回の学習によって、
そういうことか!
と霧が晴れたような感じがしました。
とはいえ、まだまだ五里霧中の感が拭えないので、しっかりと繰り返し、Python学習を続けていきたいと思います。
それでは、明日もGood Python!