ホーム < ゲームつくろー! < IKD備忘録

Visual Studio Code + Python
まずはimportを学ぶのです

(2019. 11. 25)


 Pythonが動く環境ができました。で、普通であれば次に「pyhonの文法について紹介するよ(^-^)」みたいな流れになるのですが、文法を説明したサイトは山のようにありますので、まぁそれは記事としても労力としてもつまらないのです。なので必要に応じてやります。

 Python使う上で大切な事は何か?それは「モジュールを使う」という事です。モジュールというのは何らかの処理を行ってくれるプログラムの一塊を言います。モジュールを使えば、面倒臭い処理を一から実装しなくても良くなり、素早く自分のやりたい事が出来るようになります。そのモジュールは勿論自分で作る事も出来ます。モジュールを知る事がpythonと仲良くなる最速の方法と言っても過言じゃありません。

 ではモジュールを使うにはどうするのか?ここから始めてみようと考えたわけです。



@ import

 pythonはプログラム言語なので、何もしなくても計算処理を書けます:

a = 10
b = 20
print( a + b )

こう書いて実行するとちゃんと動きます(30と出力される)。これらが基本機能として組み込まれている(Built-in)からです。しかし、例えばsin(30)を計算したいと思って、

a = sin(30.0)
print( a )

とただ打ち込んでもエラーが出てしまいます。VS Codeだと、

Exception has occurred: NameError
name 'sin' is not defined

「例外:名前エラー。'sin'は定義されない。」というエラーが出ます。なぜか?エラーの通りでsin()という関数が基本機能に組み込まれていないため、そんな関数は知らないと怒られてしまったわけです。そこで登場するのか「モジュール」です。先程のsinのプログラムを次のように書き換えます:

import math

a = math.sin(30.0)
print( a )

こうするとsin(30)が正しく計算されます。sin関数は数値計算用の関数を揃えたmathモジュールに定義されているんです。このように基本機能に無い関数などを後付けで使えるようにするのがimportです。

 importの文法自体は至極簡単で、importの後に組み込みたいモジュール名を記載するだけです。ただし使いたい関数より前に記載しておく必要があります。実際どこにでも記載できるのですが、プログラムの先頭に並べると何のモジュールをimportしているか分かりやすくなるので、一般には先頭記載がセオリーというかマナーになっています。



B 長いの嫌ならasでエイリアス

 importで組み込んだ物は基本的には<モジュール名>.<関数名>()とすると使う事が出来ます。なので先の数学関数はすべてmath.****()という呼び出し方をします。mah位ならまぁ書いても良いかなと思うのですが、中には凄く長いモジュールもあります。その場合いちいちモジュール名を書き連ねるのはシンドイと感じる物です。そういう時には「エイリアス(別名)」が使えます。

 エイリアスは元のモジュール名を一時的に別名にする機能です。先程のmathモジュールをmtというエイリアスで使えるようにするには、

import math as mt

a = mt.sin(30.0)
print( a )

とas+エイリアス名をimportの後ろにくっつけます。こうすると元のmathではなくてmtという名前で関数を呼び出せるようになります。

 同じ事はモジュールパスにも適用できます:

import os.path as pth

baseName = pth.basename("C:/test/hoge.txt")

短いからと何でもかんでもエイリアスにするとかえって混乱する事もありますので、適宜使用するようにしましょう。



C クラスや関数をimport

 mathモジュールはmathというモジュール名の下に関数が直接並んでいます。しかしモジュールによってはそこにクラスが定義されている事があります。そういうクラスは<モジュール名>.<クラス名>のように指定します。例えばパス名から最後のファイル名などを切り出すbasename関数はosモジュールの中にpathというサブモジュールが定義されています。そういう関数を使うにはosモジュールをimportし次のようにクラスを指定します:

import os

baseName = os.path.basename("C:/test/hoge.txt")

 必要な関数やクラスがどのモジュールパスに含まれているかはモジュールのリファレンスに記載されています。



D fromで記述を省略

 クラスを指定する時にいちいちモジュール名を記載するのがうざったい事もあります。そういう時に記述を簡便化する方法としてfromを使えます:

from os import path

baseName = path.basename("C:/test/hoge.txt")

 importしたいクラス名の前にform+モジュール名(クラスの直前までのパス)を記載すると、クラスや関数を使う時にモジュール名を省略できます。先程のmathモジュールに含まれていたsin関数も実は次のようにすればモジュール名を省略できます:

from math import sin

a = sin(30.0)
print( a )

 モジュールの下に複数の関数やクラスがある場合は、連続して指定する事もできます:

from math import sin, cos, tan

a = sin(30.0)
b = cos(30.0)
c = tan(1.0)

あまり使い過ぎると他のモジュールと同じ関数やクラス名があった場合に「名前衝突」を起こす事もありますので、これもほどほどに、です。