では､ 実際にこれらのモジュールをインポートするためのさまざまな方法を学んでいきましょう｡
今までは輸入のことしか分からなかったが､ 時にはかなり慌ただしくなることもある｡
例えば､ 実際には､ 別のパッケージの中に別のパッケージを入れることができます｡
例えば､ ここに新しいフォルダを作り､ New Python packageと言えば､ これをmore shopping clickと呼ぶことにします｡
なるほど｡
見たか？
パッケージの中に別のパッケージを作成し､ そのパッケージの中に独自のファイルを作成しました｡
そして､ これを今､ refactor moveして､ more shoppingフォルダの中に移動させましょう｡
だから､ もっと言ってやる｡
ショッピングをする｡
ochをクリックすると､ このモジュールがこちらに移動しているのがわかると思います｡
だから､ パッケージの中にパッケージがあるんです｡
そして､ このアクセス方法は､ 単純にショッピングドットモアと言うことになります｡
ショッピングドットショッピングカート
そして､ それをコピーして､ ここでも同じことをやってみましょう｡
そして今､ 「実行」をクリックすると
まだ使えることがわかると思います｡
でも､ これはちょっと異常なことなんです｡
パッケージが増えてくると､ 常にこのドット､ このドット､ とやっていかなければならないのは想像がつくと思います｡
長すぎて醜い｡
では､ どうすればこれを改善できるのか｡
まあ､ これをすっきりさせる一つの方法として､ importと言わず､ こんな風にするのもありですね｡
このことから､ 私たちは言います｡
パート､ 関数をインポートしたい｡
ここでは､ パッケージ名､ パッケージ名､ モジュールから､ 好きな関数をインポートしてください､ と言っています｡
今回の場合､ buy関数をインポートしたいと思います｡
このように､ 私のコードでは､ このようにすることができます｡
このメインファイルの一部であるかのように実行すればいいんです｡
これを実行すると
まだ使えることがわかると思います｡
すごい｡
だから､ その方が絶対にきれいなんです｡
そして､ これをユーティリティでも実現することができるのです｡
ユーティリティのインポートから言って､ 実際に2つのファイルや2つの関数をインポートすることができるのです｡
それが掛け算になるわけです｡
また､ 別の関数が必要な場合は､ カンマを付けてdivideと言えばよいのです｡
これで､ アップルの印刷ができるようになったわけです｡
あるいは､ ディバイドだけでなくアップルによっても｡
5×2としよう｡
そして､ 掛け算もできるのです｡
ああ､ ここにカンマがあるのは､ こういう関数だから､ これを実行するとこうなる､ というのを確認しておいてください｡
これでよしとしよう｡
これも有効です｡
だから､ これはコードをきれいにするのにとてもいい方法なんだ｡
パッケージ名､ パッケージ名からと言うようなこともできます｡
そして､ モジュール全体をインポートする｡
では､ ショッピングカートモジュールをインポートするとします｡
輸入と言える｡
だからパッケージドットパッケージ｡
あるいは､ 1つのパッケージを作成し､ 実際のモジュールのショッピングカートをインポートすることもできます｡
そこで今度は､ このショッピングカートドットバイのようにアクセスするのです｡
そして､ これもうまくいきそうです｡
さて､ 先ほどの方法ではなく､ この方法を取りたい理由は､ 名前の衝突が起こることがあるからです｡
お見せしましょう｡
例えば､ プリントして､ ここでmax関数を使っていますが､ これは組み込みの関数です｡
イテレータを渡すと､ 最大値を探してくれます｡ これを実行すると､ このリストの最大値は3であることがわかります｡
さて､ 効用関数に､ 例えば､ divideの代わりにmaxを追加して､ 単純にこう表現することにしましょう｡
リターンとウープス
さて､ 本題のπに戻ると｡
と｡
関数としてMaxを取得し､ 「実行」をクリックします｡
まあ､ ほら､ 空気は読めるしね｡
私はマックスがゼロ位置の引数を取るが､ 与えられたが､ 今マックスは､ 我々は我々が意味すると思ったものを意味しないので､
1が与えられました｡
少なくともこのファイルでは､ Maxとよくインポートしています｡
Maxはもう全く別の機能なので､ 実は既存の機能をオーバーライドすることができるんです｡
ですから､ このショッピングカートのようなものを使うことで､ Collisionと名付けたケースを1つだけ用意するようにしています｡
しかし､ ショッピングカートが持っているすべてのプロパティやすべてのメソッドは､ ショッピングカートに接続されています｡
そのため､ オーバーライド可能な複数の関数を持つ代わりに､ 名前空間は1つだけにしています｡
ちなみに､ これも私がこういうことをするのを勧めない理由の一つです｡
実際にインポートスターをすることができます｡
これは､ ユーティリティ・モジュールから､ すべてをインポートしてくださいということです｡
そして､ そんな時は
maxもインポートしているため､ 再びエラーが発生することがわかります｡
しかも､ 今､ 何が輸入されているのかすら分からないから､ 目も当てられない｡
ファイルを見に行かないとわからない｡
こんなエラーが出たら､ 「どうしたんだろう？
マックスが動いているのは､ このセリフのおかげだと思いました｡
だから､ 常に明確に､ 何を輸入したいかを言うのは良いことです｡
でも､ とりあえずマックスは外しておこう｡
しかし､ お分かりのように､ モジュールはさまざまな形で重要な役割を果たすことができます｡
私のお勧めは､ 常に明示的に､ 何をインポートしたいのかを正確に言うことです｡ 形式は通常､
import文の後にパッケージモジュールを使用するか､ モジュールをインポートするかのどちらかになります｡
あるいは､ fromステートメントでパッケージ､ サブ､ パッケージとモジュールを与えてもいいし､ モジュールにしてから､
インポートと特定の関数や実際のモジュールそのものを言ってもいいのです｡
ニーズに応じて､ さまざまな方法を｡
ここで重要なことは､ モジュールとパッケージは､ 私たちが優れたエンジニアリングの実践を行い､ 組織的に大きなプロジェクトを構築するのに役立ち､
なおかつこれらのファイルをすべて持っているということです｡
語り合う｡
わかりました｡
多かったですね｡
次の動画で詳しくご紹介します｡