ここまでで､ Pythonのコードを整理するいくつかの方法について学びました｡
最初にうまくいったのは､ Pythonをファイルに書くだけで､ それが整理されることですよね｡
私たちの全コードは､ これまで1つのファイル上にありました｡
それが､ コードを整理する一つの方法だったんですね｡
次に関数について学びましたが､ 関数は､ 何度も繰り返すコードを書かないための方法として使われました｡
ファイル内の好きな場所で使える関数を書いて､ これらの関数を何度も呼び出せるようにし､
関数に適切な名前を付けて､ コードが意味をなすようにすることができます｡
そして､ 授業についても学びました｡
このような設計図を書いて､ そこからオブジェクトを作ることができるようにします｡
Pythonのデータ型は､ 今もらったものだけでなく､ 新しいものをインスタンス化できますよね？
辞書やリストだけでなく､ 自分たちだけのオリジナルのリストや､ 特別な機能を持ったものを作ることができるのです｡
そして､ クラスを使ってコードを整理し､ それぞれのクラスに特定のメソッドや属性を与えて､ うまくパッケージ化して使えるようにすることができるのです｡
また､ 関数型プログラミングについても学びました｡ オブジェクト指向プログラミングのようにたくさんのクラスがあるのではなく､
関数型プログラミングではたくさんの関数､ 純粋な関数を使い､ その関数にデータを渡して､
物事を小さな断片に整理していくんです｡
これらはすべて､ 私たちがコードをきれいに保ち､ コードをよりメンテナンスしやすくし､ その結果､ コードを整理するためのものだったのです｡
なぜなら､ コードの行数を増やせば増やすほど､ すべてを頭の中に入れておくことが難しくなってくるからです｡
もし､ 他の人があなたのプロジェクトに参加する場合､ どのように作業が行われているかを簡単に把握する方法が必要です｡
しかし､ まだ問題があります｡
そしてその問題は､ この1つのファイルにすべてが収まっていることです｡
これまで書いてきた関数やクラスは､ すべて1つのドットPIファイルにまとめています｡
しかし､ 現実にはそうではありません｡
私たちはもっとたくさんのコードを持っていて､ 何百万行ものコードを1つのファイルにまとめることはできません｡
では､ どうすれば整理整頓ができるのでしょうか｡
まあね｡
Pythonのファイルが複数あった場合｡
私たちのプロジェクトがどんどん大きくなっていくので､ このように｡
これなら大丈夫かな？
これらのファイルをすべてリンクさせる方法はありますか？
実は､ これは業界ではごく当たり前のことで､ 私たちはこれをコードモジュールの編成方法と呼んでいます｡
そして､ モジュールは､ 簡単に言うと､ これらのファイルです｡
この1つ1つのファイル､ ドットピのファイルがモジュールなんです｡
そして､ これらのモジュールを構築することで､ 異なる関数を構築したように､ 異なるクラスを構築したように､
これらのファイルの中にクラスや関数を持つことができ､ また､ 異なるファイルを持つこともできます｡
そこで､ コードを分割するために1つ上のレイヤーを用意しました｡
そして､ このセクションでは､ モジュールについてのすべてを学び､ それをマスターして､ どのように整理されたコードを書くことができるかを試してみることにします｡
見てみよう｡
リップルでファイルをクリックすると､ メインのπがあり､ 実行をクリックするたびに､ このファイルが実行されるのがわかりますね｡
しかし､ もっと多くのファイルがある場合はどうでしょうか？
ここに別のファイルを追加して､ Utility Dot Piと呼ぶことにしたらどうでしょう｡
さっきの話からすると
この2つは何ですか？
モジュールなんですよね？
Main Piは､ モジュールユーティリティです｡
PIはモジュールです｡
そして､ モジュールを書くときには､ Pythonの変数と同じ原理で､ スネークケースを使用します｡
つまり､ スペースがあればアンダースコアを使い､ すべて小文字にするのです｡
では､ このモジュールをどのように分ければいいのでしょうか｡
そして､ これは練習によって得られるものです｡
始めたばかりの頃は､ 「どのファイルに何を入れるか」「どのファイルに何を入れるか」というのが難しいんです｡
でも､ 授業と似たようなものでしょう？
機能に類似している｡
私たちは､ コードを意味のある塊に分割したいのです｡
もう一度､ ネットフリックスで働くとしましょう｡
動画専用のファイルがあったり､ ユーザーのログイン専用のファイルやモジュールがあったり､
解析やユーザーへのお勧めを考える専用のファイルがあったりします｡
これらのクラスや関数を､ 意味のあるファイル内にまとめたいと思います｡
さて､ モジュールの最も一般的な使い方のひとつは､ ユーティリティのようなものです｡
例えば､ ユーティリティ・モジュールを作成したいとします｡ これは､ ツールベルトのようなもので､
プロジェクト全体で使用できる非常にシンプルな関数をたくさん持っているモジュールです｡
では､ ごく簡単な例を作ってみましょう｡
ここに乗算機能が存在すると言うことです｡
そして､ これには､ しびれるような1本としびれるような2本が必要です｡
そして､ ここでは単に戻るだけです｡
そして､ とてもシンプルな機能に1回分麻痺しています｡
そして､ もう一度､ 除算機能も用意します｡
そして､ はい､ 私たちはちょうどプラスまたは除算､ オペランドとパイソンを使用することができますので､ これは一種の無駄です｡
しかし､ 私の話に付き合ってください｡
ここでは､ その一例を示そうと思います｡
では､ 今度は2です｡ 1番を2番で割ったものを返します｡
シンプルで良いですね｡
だから､ これ｡
これらの機能をすべて備えたユーティリティ・モジュールです｡
さて､ このファイルでは実は何もしていないことに注目してください｡
単に関数を定義しているだけで､ どの関数も実行していないのです｡
しかし､ このユーティリティ・モジュールがあって､ それを私のメインのpyファイルで使いたいとします｡
どうすればいいのだろう？
さて､ この2つのファイル間の通信方法はいたってシンプルです｡
あとはimportコマンドでインポートして､ インポートするファイル名を指定するだけです｡
何を輸入したいのか？
そんな風にユーティリティを輸入したいのです｡
pyというドットを付けていないのは､ インポートするものがすべてpythonファイルであると仮定しているからです｡
だから､ そんなことをする必要はないのです｡
名前だけでいいんです｡
ただ､ それだけなんです｡
では､ ここでユーティリティをプリントしてみましょう｡
これを実行すると
おっと
見たか？
からのモジュールユーティリティを用意しています｡
それから､ これはこのウェブサイトが生成してくれるファイルパスなので､ 特に問題ありません｡
さて､ ここでいくつかのことが起こりました｡
1つは､ このpy cacheフォルダ underscore, underscore, py cacheを生成したことです｡
と｡
まいったなぁ｡
なんだこのちんぷんかんぷんな文章は？
うーん｡
これは......かなりわかりにくいですよね？
さて､ このパイキャッシュは､ 例えばimport文のあるファイルを実行するたびに作成されます｡
だから､ モジュールを使っているとき｡
パイキャッシュが何をするかというと､ 「実行」をクリックするときですよね｡
InterpreterはこのPodcastフォルダを作成し､ 次のように言います｡ 「私はこのファイル､
このメインのpiファイル､ pyファイルのインポートではない可能性があるもの､ 例えばutilityを実行しています｡
うちの場合､ 現金化するつもりです｡
そこで､ ここにドットπと書いてあるのをご覧ください｡
これは､ C言語のPythonインタプリタを使用しているためです｡
これは C 言語で書かれたインタプリタである C python
で､ これは実際にコンパイルされたファイルです｡ したがって､
次にメインの pi でここを実行すると､ 何も変わりません｡
そしてユーティリティπ｡
そして､ これによって､ 物事がより速く進むようになりました｡
もう一度Main Piを動かそうとしたら､ キャッシュってそういうことだったんですね｡
キャッシュは､ これは覚えておこう､ これはコンパイルバージョンだから､ コンパイルのステップはもう必要ない､
というものです｡
しかし､ メインのpiファイルはコンパイルされないことに注意してください｡ なぜなら､ まあ､ 毎回実行するわけですから｡
さて､ ユーティリティ関数を変更して､ そこに除算を入れないようにすると､ 実行をクリックしても､ ここでは気づかないでしょう｡
しかし､ これは現在､ 別のファイルがあるため､ 再実行されています｡
乗算はあっても除算はないでしょう？
そこで､ もう一度ディバイドを復活させましょう｡
ここに戻り､ 実行をクリックします｡
そして､ そこにあるのは
今､ ここにもディバイドがあるんです｡
でも､ これは触れないものなんです｡
これは､ 私たちが使っているどのエディターでも同じことです｡
また､ 円グラフのようなものを使う場合にも､ このようなことが起こるということを､ いくつかのビデオで紹介します｡
これは､ エディタがプログラムを速く走らせるためにやっていることに過ぎない｡
だから､ 今､ 私はアクセスできるのです｡
これをもう少し小さくしてみましょう｡
ユーティリティにアクセスできるようになりました｡
そして､ ここからが面白いところです｡
もし私がここでドットをしたら､ それを見てください｡
割り算と掛け算にアクセスできるので､ 数字の掛け算ができるようになりました｡
2クリックと3クリックの実行としましょう｡
そして､ 私のメインファイルでユーティリティ・モジュールを使用することができるようになりました｡
とても､ かっこいいです｡
分割して実行をクリックすると
これも使えますね｡
とても､ かっこいいです｡
そして､ ここに別のファイルがあり､ 別のものをインポートしたい場合､ 何度でもインポートすることができます｡
例えば､ ファイルにユーティリティがあるとしましょう｡
まあ､ それをインポートして､ いくらでも自分のファイル間で使いまわせるんですけどね｡
なんてかっこいいんでしょう｡
これで､ コードを整理して､ すべてのファイルを一緒に通信させることができるようになりました｡
なぜなら､ 現実には大きなプロジェクトがあり､ その大きなプロジェクトは､ 異なるチーム､ 異なるプログラマーによって進められるからです｡
そして､ これらのファイルをすべて扱う方法が必要です｡
そして､ モジュール間でimport文を使うことで､ 異なるファイル間で関数が提供してくれた機能を使うことができたように､
機能を使うことができるようになったのです｡
また､ 会社勤めをしていると､ ドットパイファイルの最初の2､ 3行はインポート文であることがほとんどです｡
なぜなら､ 通常は他のファイルと通信しているからです｡
次の動画でもう少し勉強してみましょう｡