だぶるばいせっぷす 新館

ホワイトカラーではないブルーカラーからの視点

【プログラミング】 python奮闘記 その7 ~モジュールの使い方

前回の投稿では、モジュールの説明を簡単にしました。
この『奮闘記』を最初から読んでくださっている方は、『今更』って感じになりますが、この投稿自体は、pythonどころかプログラミングの初心者が、プログラミングを1から勉強し直す過程を書いていますので、書いている私自身が間違って理解している部分もあると思います。
その際は、優しく指摘していただけたらと思います。

という事で本題です。
前回は、python自身に拡張機能が存在し、モジュールを入れる事で出来る事が増えるという事を書きました。
kimniy8.hatenablog.com

このモジュールは、pythonをインストールする際に一緒にダウンロードされてくるものもあれば、自分自身で別途、ダウンロードしなければならないものまであります。
別途、ダウンロードが必要なものは、単にダウンロードしただけで使えるものだけではなく、別にインストールする必要があったりするので注意が必要です。

私の場合は、前に紹介した本


      

を読んで、書かれているプログラムを写経する際、pygame というモジュールをインストールしなければならない状態になりました。
早速、pygame をダウンロードし、インストーラーを実行してPCにインストールしたのですが… にもかかわらず、pygame が認識されない。
結局、このインストールで詰まってしまい、少しの間、やる気を無くしていました。
結果としては、コマンドプロンプトを立ち上げて、『pip3 install pygame』と打ち込んだら、改めてインストールが始まったので良かったのですが、初心者からしたら、『じゃぁ、最初のインストール作業は何だったの?』って感じですよね。

話がずれたので戻しますと、python というのは、自分で使いたい機能を実現してくれる関数やメソッドが入ったモジュールを探してきて、それを import する事によって、プログラムを作っていきます。
ここで、『メソッド』という新たな言葉が出てきたので、一応解説しておきます後、メソッドとは関数と同じようなものです。
書き方も使い方も関数と同じで、そこだけを切り抜いてみると、関数なのかメソッドなのかわからない程に似ているものです。

では、何が違うのか。 これは、微妙な違いすぎて、私が誤解して理解している可能性も高いですが、クラスに紐付いている関数がメソッドという認識で良いのだと思います。
つまり、基本的には同じものだし、理解としても動き方としても同じものだけど、存在する場所が違うから名前が違うって感じなんでしょうね。
京都の人間は『今川焼き』というけれども、大阪の人間は『回転焼き』という。
両者のお菓子としての違いはわからないし、見分けもつかないけれども、『今川焼き』と呼んだ人間が京都出身で、『回転焼き』と呼んだ人間が大阪出身というのは分かる。

本やブログを読んだ時に、関数と書いてあれば、それは独立した関数の可能性が高いし、メソッドと書いてあれば、何らかのクラスに紐付いていると考えられる…
こんな感じの理解で良いのだと思います。

そして、これは前回の繰り返しになるわけですが、プログラミングというのは、基本的には『自分がプログラムを使ってパソコンにやらせたい操作』は、どのメソッドを使えば実現できるのか、そのメソッドは、どのモジュールに入っているのかを調べる事が、かなり重要な作業だったりします。
『プロとしてプログラマーをやってる人は、どのモジュールでどんな事が出来るのか、全部覚えてるんでしょ?』なんて、私みたいな素人は思ってしまいますが、実はそうでもないようで、『何をimportすれば実現できるのか。』というのは、IT業界の一線でバリバリ働いている人も、ググって探しているようです。
まぁ、python を普通にインストールするだけで、勝手にオマケでついてくる数多くのモジュールを、図書館のように管理して調べられるようにしてくれている『標準ライブラリ』を読むだけでも、頭がくらくらするレベルですし、別途ダウンロードが必要なモジュールまで全部覚えるってのは、現実的じゃないですよね。
Python 標準ライブラリ — Python 3.6.5 ドキュメント

そんなわけで、『よく使うモジュール』を覚える程度にしておいて、後は、グーグルの検索能力を磨くのが、プログラマーになる為の一番の近道かもしれません。

モジュールについて復習が終わったところで、次は、実際にインポートする方法を書いていきます。
インポートの方法は3つあって、最初に書くのが一番基本で分かりやすい
import モジュール名
で導入する方法。 余計なものがついていないので、直感的に分かりやすいと思います。

次に紹介するのは、as を使った方法です。書き方は
import モジュール名 as 別名
『as』を利用することによって、モジュール名を別名に変換してインポートすることが可能になります。
これによって、『tkinter』というモジュール名を『TK』って感じで省略して短くすることが出来ます。

『何故、別の名前に置き換えて省略する必要があるの?』と思われる方も多いと思いますが、pythonでは、importしたモジュールのメソッドなり関数を使おうと思うと、最初にモジュール名を宣言しないとダメなんです。
例えば、『tkinter』というモジュールの『canvas』という機能を使おうと思うと、『tkinter.canvas』って感じで書かなければなりません。『tkintar』モジュールの機能を使うたびに、その前に『tkinter.』と付けなければならないので、長いモジュール名だと単純に面倒くさい。
ですが、『as』を使って省略しておくと、『TK.canvas』と書くだけで良いので、文字数が省略できます。ここで注意が必要なのが、略称は、他の関数やメソッドの名前とバッティングしないようにするって事です。

そして最後の方法ですが、最初に書いておきますと、この方法はあまり使わないほうが良いようです。
ただ、色んな所で紹介されているので、一応紹介しておきますと、『from』を使った方法です。
from モジュール import 名前1, 名前2
こう書くと、モジュール内の特定のものだけをピンポイントでインポートすることが出来ます。
from モジュール import *
この様に書くと、モジュール内のみで限定された変数以外を全てインポートすることが可能です。

何故、この様な限定されたimportの方法があるのかというと、この方法で書くことによって、importした部品を使う際に、モジュール名を書く必要が無くなります。
つまり、『tkinter』モジュールの機能を『from』を使ってimportする事によって、本来なら書かなければならない『tkinter.』、『as』を使って『TK』に省略した場合は、『TK.』というモジュール名を書かなくても良くなる為、手間が省けるからです。
かなり便利な機能ですが、何故、あまり使わないほうが良いとされているのかというと、問題が起こりやすいからです。

例えば、複数のモジュールをimportした場合、もしかすると、同じ名前のメソッドや関数、変数があるかも知れません。
この様な名前のバッティングが起こってしまっている状態で、その関数なり変数が呼び出された場合、どのモジュールの値が呼び出されたのかが判断できません。
病院の待合室で順番を待っている状態に例えると、看護師さんが『レオナルドさ~ん』って呼んだ際に、その場に『レオナルド』という同じ名前の人物が3人いれば、皆が立ち上がってしまって困ってしまいますよね。
でも、『ヴィンチ村のレオナルドさ~ん』と補足情報を伝えておく事で、この様な自体は避けれます。

また、少し時間が経過して、後からプログラムを見返した場合に、モジュール名も略称も書いていなければ、その関数なり変数が、どこから呼び出されたのかが分かりません。
そういうのを避けるためにも、モジュール名はできるだけ書くようにした方が、後々のことを考えると良いのかも知れません。

という事で今回は、モジュールのimportを中心に書いていきましたが、次回からは、実際にプログラムを書くことに挑戦してみようと思います。
kimniy8.hatenablog.com