Python なっトク!

スッキリ! pythonのライブラリ、パッケージ、モジュール、クラス、関数の違い

2023-06-13

たすく

きょうは、5つ並んだ用語を1本の入れ子に整理してしまいます

ライブラリ。パッケージ。モジュール。クラス。関数。

Pythonを触っていると、この5つが当たり前のように出てきます。

そして、たいてい説明されないまま進みます。

なんとなく分かったふりで、ずっと来ちゃったやつ……

あかり

混乱の原因は、用語が難しいことではありません。

どれがどれを含むのかが、示されないまま並ぶことにあります。

ここは、大人の学び直しでよく詰まるところです。

学生時代なら、用語は覚えれば済みました。

試験に出るのは、定義だったからです。

いまは違います。

定義を覚えても、コードを読む手は止まったままです。

要るのは、5つの定義ではありません。

入れ子の形が1つ、頭に入っていることです。


結論:フォルダとファイルに置き換える

いちばん早いのは、いつも見ている形に置き換えることです。

パッケージ = フォルダ

モジュール = ファイル(.py)

クラス = ファイルの中の設計図

関数 = その中の、ひとつの仕事

これだけで、ほとんど片が付きます。

フォルダの中にファイルがある。

ファイルの中にコードが書いてある。

それと同じ話です。

あ、知らない構造じゃなかったんだ

あかり
たすく

そうなんです。新しく覚えるのではなく、知っている形に置き直すだけで済みます

並べると、こうなります。

呼び名実体中に持つもの
パッケージフォルダモジュール、下位のパッケージ
モジュールファイル1つクラス、関数、変数
クラスコードメソッド、変数
関数コード一連の処理

ここまでは、素直な入れ子です。

ライブラリだけ、仲間はずれです

お気づきかもしれませんが、表にライブラリがありません。

意図的に外しました。

パッケージとモジュールは、形の名前です。

ライブラリは、役割の名前です。

フォルダかファイルか、という話ではありません。

「人に使ってもらうためのまとまり」を、そう呼んでいるだけです。

だから、大きさはまるでそろっていません。

  • ファイル1つだけのライブラリも、ふつうにあります
  • numpyのように、フォルダとファイルが山ほど入ったものもあります

同じ「ライブラリ」という言葉で呼ばれます。

たすく

ここが分からないと、いつまでも階層のどこに置けばいいのか決まらないんです

並びの中に置こうとするから、混乱します。

ライブラリは、並びの外にある呼び名だと思ってください。

ここが誤解されやすい:書き方を変えても軽くなりません

次の2つは、どう違うのでしょうか。

① from pandas import DataFrame

② import pandas as pd
   pd.DataFrame(...)

よく言われるのが、この説明です。

「①は必要な分だけ読み込むので軽い」

「②は全部を読み込むので重い」

これは、正しくありません。

え、そう覚えてたんだけど

あかり

Pythonの公式の説明では、①はこう動きます。

  1. まず、fromに書いたものを探して読み込み、初期化する
  2. そのうえで、指定された名前を取り出して手元に置く

つまり、①でもpandasは丸ごと読み込まれています。

中の初期化コードも、同じように走ります。

変わるのは、読み込む量ではありません。

自分の手元に、どの名前が並ぶかだけです。

①は、手元に置くのがひとつ。

②は、まとめて置いて、その都度たどる。

差は、そこだけです。

では、どちらで書くべきか

速さで選ぶ話ではなくなったので、基準を置き直します。

  • どこから来た名前かを見せたい … ②。あとで読む人が迷いません
  • 何度も出てきて長い … ①。読みやすさが勝ちます

実務でよく効くのは、②を既定にしておくことです。

名前がぶつからないからです。

①を重ねると、どこから来た名前なのかが分からなくなります。

同じ名前を別のところから持ってきて、上書きしてしまう事故も起きます。

速さじゃなくて、読みやすさで決めるんだ

あかり

ついでに、よくつまずく書き方も1つ。

import pandas.dataframe   # 通りません

これが通らないのは、書き方が間違っているからではありません。

点でつなぐ書き方そのものは、正しい形です。

通らないのは、その名前のファイルが存在しないからです。

DataFrameはファイルではなく、ファイルの中に書かれたクラスです。

フォルダをたどる書き方では、そこへは届きません。

自分で作るとき、どこで切るか

読むだけでなく、作る側になったときの話も少しだけ。

1つのファイルに、どこまで詰めるべきか。

決まりはありません。

ただ、迷ったときの目安はあります。

「一緒に直すものは、一緒に置く」

片方を直したら、必ずもう片方も直す。

そういう関係なら、同じファイルに置いたほうが楽です。

逆に、いつも別々に直しているものは、分けたほうがいい。

行数で切ると、たいてい後で困ります。

直すときの手が、どう動くかで切ってください。

用語を覚えるより、疑えるほうが効きます

最後に、勉強のしかたの話を少しだけ。

今回いちばん大事なのは、5つの定義ではありません。

「①のほうが軽い」が広く信じられている、という事実のほうです。

たすく

ぼくもずっとそう思っていました。調べて、はじめて違うと分かったんです

もっともらしい説明は、そのまま定着します。

しかも、書いたコードは動いてしまう。

動くので、間違いに気づく機会がありません。

大人の学び直しで効くのは、覚える量ではありません。

「その説明、ほんとうか」と一度立ち止まれることです。

そして、立ち止まった先で調べれば、公式の説明はたいてい見つかります。

関数の名前が覚えられない、という悩みにはPythonの関数が覚えられないのは、当たり前ですのほうが効くと思います。

手元に持ってくる前に減らす、という考え方はPythonとSQLの使い分け。どこで線を引くかにまとめました。

  • この記事を書いた人
  • 最新記事

花丸たすく

▸「思考タイプ診断」で、働き方をスマートに
▸ あなたの価値を、現実を変える力へ
▸ 「IT戦略×データ分析×プロジェクトマネジメント」の知見
▸ 京都大学卒業後、教育・情報サービス系JTCなどでDX推進・データ分析・人材開発に従事