python勉強会~その2~ 【モジュール化、ファイル】

python勉強会 Python

こんにちは、黒猫です。

今日はモジュール化について勉強していきます。

モジュール化は各パーツを別のファイルに分けて多数人で1つのプログラムを作成するときに用いられます。
多数のファイルを後から1つのコードとして使用することができるので、プログラミング効率がものすごく良くなります。また、良く使用するプログラムをモジュール化することで別のプログラムにも応用することができるので是非覚えておきたい手法ですね。

モジュール化

例えば、円や球の面積を求めたいプログラムをモジュール化すると

pi = 3.14159

# 円の面積を求める関数
def area(radius):
    return pi * (radius ** 2)

# 球の表面積を求める関数
def sphereSurface(radius):
    return 4.0 * area(radius)

と書くことができます。このファイルをcircle.pyとします。

このモジュールを別のファイルで呼び出すときはimport文を用いてアクセスします。
別のファイル内で円の面積を求めたいときは

import circle
print(circle.area(3)) # 半径3の円の面積

と記述することで出力することができます。非常に簡単です。

このimport文はいろいろな書き方ができます。
例えば、from M import * と記述するimport文ではファイル名を省略することができます。
使用例としては、

from circle import *
print(pi)          # 3.14159
print(circle.pi)   # エラーとなる

こんな感じです。
ここで注意してほしいこととしては、from M import * を使用すると「circle.」というコードを書くと逆にエラーになってしまうことです。

このfrom M import * は使用すると非常に便利ですが、どのファイルからimportしたものかわからず、また、メインのコード内でモジュールに使われている変数名の関数や変数を使用すると、どちらの変数かわからなくなるので使用するときは注意しましょう。

他のimport文の使い方としては、import M as hoge という使い方があります。
これはファイル名「M」を「hoge」として呼ぶことができるようになる呪文です。
ファイル名が長い場合や省略したい場合に使用します。
使用例としては、

import circle as cir
print(cir.pi)  # 3.14159

といった使い方ができます。

こちらは先ほどの from M import * とは違ってファイル名を省略していないので同一名の変数を使用してもこんがらがる心配はありません。私はこちらをよく使用しますね。

ファイル

ファイルはコード内で計算したものや残しておきたいものを保存するために用います。
Pythonはファイルハンドルを通してファイルにアクセスすることで、コードがOSに依存しないようにしているそうです。なのでWindowsでもMacでも同様の書き方をしてOKとなります。

ファイルの呼び出しは、

nameHandle = open("fileName", "w") # ファイルを開く
name = raw_input("Enter name: ")   # nameを入力
nameHandle.write(name + "\n")      # ファイルに書き込む
nameHandle.close()                 # ファイルを閉じる

といった感じで行えます。

ファイルを開くときに記述しているオプション「w」は書き込みモードという意味になります。
このオプションは

  • w : 書き込みモード
  • r : 読み込みモード
  • a : 追加書き込みモード

の3種類があります。

先ほどのファイルに追加して記述したい場合は、

nameHandle = open("fileName", "a")  # ファイルを追加モードで開く
nameHandle.write("David\n")         # 書き込み
nameHandle.close()                  # ファイルを閉じる

といった風に記述することができます。

追記

この内容は「Python言語によるプログラミングイントロダクション 第2版 データサイエンスとアプリケーション」に沿って行なっております。

興味がある方は是非購入してみてください。

コメント

%d人のブロガーが「いいね」をつけました。
タイトルとURLをコピーしました