スクリプトの作成とモジュール
スクリプトの作成とモジュール
前回の最後の方のサンプルを除き、その全てをPythonの対話型インタープリタの中で実行してきました。
しかし、インタープリタで実行すると毎回起動するたびに前回のコード(定義した関数やクラスなど)は失われてしまいます。そこで、コードを再利用するためにファイルを作ってそこにコードを書いていきます。それにより再利用可能なプログラムを作成できます。
このことをスクリプトの作成と呼びます。また、その時に作成されたファイルのことをPythonではモジュールと呼びます。
スクリプトの作成と実行
前回の最後のサンプルは全てファイルで作成しました。まさに、スクリプトの作成です。スクリプトの作成はテキストエディタを使って行います。(MacならAtom、VSCodeなどがオススメです。)
実行の仕方はターミナルでPythonプログラムの後にプログラムのファイル名を指定して実行します。
# sample.py print("Hello World!")
# 実行結果 (python sample.py)
Hello World!
モジュールのインポート
pythonでは他のモジュールをimportを使うことによって参照することができます。参照したモジュール内に含まれる変数やクラス、関数などを参照元のプログラムで使うことができるようになります。importの使い方はimport モジュール名です。モジュール名にはインポートしたいファイル名の.pyを除いた部分を書きます。
# helloworld.py def helloWorld(): print("Hello World in helloworld.py")
# sample.py import helloworld # モジュールのインポート print("using helloWorld(import from helloWorld.py)") helloworld.helloWorld() #モジュール名.関数名
# 実行結果 (python sample.py) using helloWorld(import from helloWorld.py) Hello World in helloworld.py
今回は、2つのファイルを作成しました。helloworld.pyにはhelloWorld()関数を定義しています。それをsample.pyにimport helloworldによりインポートします。それによりhelloworld.pyで定義した関数が使えるようになります。関数を呼び出すときはモジュール名.関数名です。結果から、実際に呼び出せていることがわかります。
モジュールから関数を直接インポート
先の例では、別モジュールの関数をインポートし、実行することができました。 しかし、繰り返し使う関数を何度もモジュール名.関数名で指定するのは大変です。そこで関数名を指定してインポートします。方法は、from モジュール名 import 関数名です。先程のsample.pyを書き換えます。
# sample.py from helloworld import helloWorld # from モジュール名 import 関数名 print("using helloWorld(import from helloWorld.py)") helloWorld() #関数名のみでOK!
# 実行結果 (python sample.py) using helloWorld(import from helloWorld.py) Hello World in helloworld.py
結果は先程のサンプルと同じです。しかし、関数を直接インポートしているため、関数呼び出しを関数名のみで行えています。
別名でインポート
関数を直接インポートすると関数名のみだけで関数を実行することができます。しかし、同じモジュールから多くの関数をインポートしたい場合、全てを個別にインポートするのは大変です。そこで、インポートするモジュール名に別名つけます。import モジュール名 as 別名です。
# hello.py def helloWorld(): print("Hello World in hello.py") def helloPython(): print("Hello Python in hello.py")
# sample.py import hello as ho # import モジュール名 as 別名 print("using helloWorld(import from helloWorld.py)") ho.helloWorld() ho.helloPython()
# 実行結果(python sample.py) using helloWorld(import from helloWorld.py) Hello World in hello.py Hello Python in hello.py
今回は別名をhoにしました。ho.関数名でインポートしたモジュールの関数が呼び出せていることがわかります。このようにすることで、モジュール名をわかりやすくしつつ、多くの関数を1つずつインポートする必要がなくなります。
インポートにいて
関数を別名でインポートするのと個別の関数を指定してインポートする方法を説明しましたが、2つの方法があるのはなぜでしょうか。それは多くの関数が定義されているモジュールから1つだけインポートしたいのに、全てをインポートするのは無駄が多いです。多くはそのような場合に使い分けます。
最後に
お疲れ様でした。