ホーム     戻る

 抱けば君のなかに菜の花灯りけり
               河原枇杷男
 松の花かくれてきみと暮らす夢
               渡辺白泉
 次の世は茄子でもよし君と逢わん
               折笠美秋

20131015改訂中
 第14章 モジュールとパッケージ

 

 モジュール:定義した関数を再利用したい場合、その関数を切り出して、別のファイルに整理。他
                のスクリプトからその関数を呼び出して利用する。このファイルに整理したものがモジ

        ュール。
標準ライブラリにモジュールが収められている。モジュールは内部に定義した

        関数や変数を外部から利用するもの
。(上平哲・即効パイソン・秀和システムp159)
               
 モジュール
プログラムのコードやデータの集合のこと:最上位の構成単位:プログラムのファイル:
       名前が.py拡張子で終わるpythonのプログラムファイルはすべてモジュール・
       
pythonプログラムで利用できる「名前」(名前空間)という側面もある。
      
 モジュール:一度入力したコードを保存して何度でも利用できるようにするためにコードを  
       ファイルに記述する。コードを記述したファイルをモジュールという。
       
 モジュール:oopの抽象概念:imprtして使用するメソッドの集まり。
 モジュールpythonは言語の中心部分を小さくし、残りの機能をモジュールとして提供する。
 モジュール:スクリプトをpyという拡張子のついたファイルに保存するだけ。
       作成したモジュールはimportを利用して、別の名前空間で利用する。
       fromを使い、モジュールから特定の変数や関数を取り出すことができる。
       モジュールのimportは基本的に一度しか行われない。
 モジュール:関数や変数やオブジェクトの定義を書いたファイル。ファイルはテキストファイルとして
              .pyという拡張子を付けて保存する。.何も書いてないテキストファイルに.py拡張子を付

       けて 保存すれば最小のモジュールになる。
プログラムモジュール:プログラムは実行のために作られる。モジュールはプログラムからインポ
                                 ートされ、使われるために作られている。

   名前:属性とも呼ばれる。:特定のモジュール(オブジェクト)に属する変数の
                   名前
 import
モジュール全体をインポートするための文:起動方法の一種:他の  
      ファイルをロードしそのファイルにアクセスする権限を得る操作:
      
 モジュールプログラムで利用する関数のような部品を、利用目的によって
        分類する仕組み。
 標準ライブラリーpythonに標準で組み込まれているモジュールやパッケ
           ージ。高度、複雑な処理を手軽に利用できる。
 
 自作モジュール;自分で作った関数などをまとめておくことができる。

 モジュールimportする

 >>> import math
 >>>
dir()
 
 ['__builtins__', '__doc__', '__name__', '__package__', 'math']

 >>> from math import sin,radians
 >>>
dir()
 
 ['__builtins__', '__doc__', '__name__', '__package__', 'math', 'radians', 'sin'
]
 
 >>>
import math
 >>> sine = math.sin
 >>> radians = math.radians
 >>>
dir()

 ['__builtins__', '__doc__', '__name__', '__package__', 'math', 'radians', 'sin',   
 'sine']
 >>> sin(90)

 0.89399666360055785
 
 >>> math.sin(90)

 0.89399666360055785

 >>> sine(90)

 0.89399666360055785

 組み込みモジュールを使う

 timeモジュール:日付文字列を扱う
 >>> def time(b):
      import
time
      time.sleep(b)              
与えられた秒数だけ処理を停止する
      
print('b')

 
 >>> time(5)

    b

 ntモジュール:os依存の情報
         python起動直後作られる

 >>> import nt
 >>> nt.environ

 {'TMP': 'C:\\DOCUME~1\\WS13\\LOCALS~1\\Temp',    
 'COMPUTERNAME': 'NEWDESKTOP', 'USERDOMAIN': 'NEWDESKTOP',
 'SystemDrive': 'C:', 'PROCESSOR_IDENTIFIER': 'x86 Family 15 Model 2
 Stepping 9, GenuineIntel', 'PROCESSOR_REVISION': '0209',
 'SystemRoot': 'C:\\WINDOWS', 'HOME': 'C:\\Documents and
 Settings\\WS13', 'HOMEDRIVE': 'C:', 'TK_LIBRARY': 'C:\\Python30
 
\\tcl\\tk8.5', 'TEMP': 'C:\\Documents and Settings\\WS13\\Local
 Settings\\Temp:c\\IronPython-1.1', 'PROCESSOR_ARCHITECTURE':
 'x86', 'TIX_LIBRARY': 'C:\\Python30\\tcl\\tix8.4', 
 'ALLUSERSPROFILE': 'C:\\Documents and Settings\\All Users',
 'SESSIONNAME': 'Console', 'HOMEPATH': '\\Documents and
 Settings\\WS13', 'Path': 'C:\\Program Files\\Common Files\\Pervasive
 Software Shared\\pvswcore;C:\\PROGRA~1\\JUSTSY~1
 
\\JSLIB32;C:\\WINDOWS\\system32;C:\\WINDOWS;C:\\WINDOWS\\System32
 \\Wbem;C:\\Program
Files\\PC-Doctor for
 Windows\\services;C:\\Program Files\\Common Files\\MDL
 Shared\\ISIS;C:\\Program Files\\JDL\\system\\object;C:\\Program
 Files\\JDL\\system\\dll;C:\\Program Files\\Common
 Files\\InterSystems\\Cache;C:\\PROGRA~1\\Borland\\Delphi6
 
\\Bin;C:\\PROGRA~1\\Borland\\Delphi6\\Projects\\Bpl;c:\\Program
 Files\\Microsoft SQL Server\\90\\Tools\\binn\\', 'USERNAME':
 'WS13', 'LOGONSERVER': '\\\\NEWDESKTOP', 'windir':
 'C:\\WINDOWS', 
 'TCL_LIBRARY': 'C:\\Python30\\tcl\\tcl8.5', 'ProgramFiles':
 'C:\\Program Files', 'PATHEXT':
 '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH', 'CLIENTNAME':
 'Console', 'FP_NO_HOST_CHECK': 'NO', 'ComSpec':
 'C:\\WINDOWS\\system32\\cmd.exe', 'APPDATA': 'C:\\Documents 
 and  Settings\\WS13\\Application Data', 'NUMBER_OF_PROCESSORS':
 '1', 'CommonProgramFiles': 'C:\\Program Files\\Common Files',
 'PROCESSOR_LEVEL': '15', 'OS': 'Windows_NT', 'USERPROFILE':
 'C:\\Documents and Settings\\WS13'}
 

 >>> nt.getcwd()  
  現在の作業フォルダ(カレントワーキングディレクトリ)を「返す

 'C:\\Python30'


 >>> nt.listdir('C:\\Python30')
       #
指定したフォルダに存在するフォルダ名やファイル名をリストで取得
['accountclas.py', 'ask.py', 'class20.py', 'class4.py', 'c同族会社.py', 'data.txt', 'data1.py', 'data2.py', 'DLLs', 'Doc', 'elif1.py', 'fact.py', 'fact2.py', 'FirstClass.py', 'for1.py', 'for2.py', 'for3.py', 'for4().py', 'for5.py', 'for6.py', 'haifu.py', 'if1.py', 'if10.py', 'if11.py', 'if2().py', 'if2.py', 'if3.py', 'if4.py', 'if7.py', 'include', 'kaneko.py', 'Lib', 'libs', 'LICENSE.txt', 'myclass.py', 'NEWS.txt', 'pyintro.py', 'python.exe', 'pythonw.exe', 'README.txt', 'recur.py', 'SecondClass.py', 'ss.py', 't.py', 'tcl', 'Tools', 'w9xpopen.exe', 'while1.py', 'while10.py', 'while11.py', 'みなし譲渡.py', 'カレンダー', 'クラス1.py', 'クラス2', 'クラス2.py', 'コメント.py', 'ディク応用1.py', 'リスト割り算.py', 'リスト計算集計.py', 'ループ', '三角形.クラスpy', '事業要件.py', '人口.py', '個物2.py', '偶数.py', '公的年金.py', '再帰2.py', '利子.py', '同族会社1.py', '同族判定.py', '同族1.py', '国内取引.py', '好物.py', '好物.2py', '存在.py', '存在確認.py', '寄付金.py', '対価要件.py', '平均.py', '年調データ.py', '年調給与額.py', '年齢.py', '役員退職金,.py', '役員退職金.py', '扶養控除額.py', '指数.py', '改行.py', '数値・変数.py', '数1.py', '文字列2.py', '日時差.py', '時価.py', '書式.py', '最大公約数.py', '月.py', '消費税課税対象.py', '生保1.py', '生徒.py', '科目.py', '科目2.py', '給与所得控除後.py', '給与調整.py', '評価.py', '課税対象.py', '財務1.py', '資産譲渡.py', '配偶者控除額.py', '配当所得.py', '重量.py', '長期譲渡.py', '障害・寡婦夫・勤学控除額.py', '電話帳.py', '電話番号.py', '65以上公年.py', 'c同族会社.py']

 mathモジュール:数学関係

 >>> math.pi             円周率
 
 3.1415926535897931

 
 >>> math.e             定数e
 2.7182818284590451
 >>> math.pow(5,6)       < 
 累乗
 15625.0
 >>> math.sqrt(345)     
 平方根
 18.574175621006709
 >>> math.radians(90)    < 
 度をラジアンに
 1.5707963267948966
 >>> math.degrees(math.radians(90)) 
ラジアンを度に
 90.0
 >>> math.exp(3)         < 
eのx乗
 20.085536923187668
 >>>
math.e**3
 20.085536923187664
 >>> math.log10(100 * 100 * 10) 
10を底にした対数
 5.0

 (1)モジュールを作る。importする。属性にアクセスする。

 title = "my real life"


 mydoc1.pyとして保存する。

 モジュールのロード 
 >>> import mydoc1

 
モジュールの属性にアクセス
 >>> mydoc1.title
 'my real life'
                                     
 from:
モジュールの特定の「名前」(名前空間)だけをインポートする文:インポート対象のファイル
    の中のどの属性にアクセスするか指定できる。モジュール属性がコピーされると、その後は普
        通の変数のように利用できる。from モジュール名 import 属性1 、属性2、・・・

    
 >>> from  mydoc1  import  title
          >>>  
title
                 'my real life'   <  普通の変数のように利用


 (2)さらにモジュールについて

 モジュールクラスは実体(データ)と振舞い(処理)を持った「もの」を処理する。
 モジュール:処理の部分だけをまとめるもの。
 モジュールインスタンスを持つことができない。
 モジュールは継承できない。
 モジュールの提供するメソッドは「モジュール名。メソッド名」という形式で参照。
 モジュールの使い方:名前空間の提供
 モジュールを作る:定数、メソッドの定義、

 標準モジュールのインポート
 標準モジュールはどこからでもインポートできる。

 
mathモジュール                                     

 >>> import math            <  モジュールは名前がついたオブジ                                                                                                        ェクト:インポートする
 >>> 10 * 20 * math.sin(math.radians(45)) / 2 
 モジュールは変数のように使う
 70.710678118654741
 fromを使う。

 >>> from math import sin ,radians    モジュール名mathを省略
 >>> 10 * 20 * sin(radians(45)) / 2         
 70.710678118654741

 datetimeモジュール

 ある日とある日の間の日数を求める

 >>> import  datetime            < モジュールを使う
 >>> a = datetime.datetime(2008,4,29)
 >>> b = datetime.datetime(2007,1,31)

 >>> a - b
 datetime.timedelta(454)              <
実行結果

 今日の日付けを求める

 >>> import datetime             < モジュールを使う


 >>> datetime.datetime.today()
 datetime.datetime(2008, 8, 15, 17, 18, 15, 984000) < 実行結果

 曜日を求める
 >>> import datetime
 >>> a = datetime.datetime(2007,1,1)
 >>>
a
 datetime.datetime(2007, 1, 1, 0, 0)
 >>> a.weekday()
 0                           < 実行結果月曜
                                                 
月曜0・・・6日曜
 

 (3)モジュールのまとめ

 標準ライブラリー:モジュールプログラムで使う関数のような部品を利用目的によって
                   分類する仕組みサブルーチン・プロシージャー
                   プログラミングの4ッ目の基本制御構造(順次実行、
                   ループ、分岐に続く)組み込みモジュールを使う。
                                         自分の作ったモジュ ールを組み込む。

 import文を使いモジュールを読み込む
 標準モジュールmathinportして高度な演算を行う。

 >>> import math
 >>> 10 * 20 * math.sin(math.radians(45)) / 2
 70.710678118654741

 pythonの標準モジュール

 sys
 os
 string
 math
 times

自作モジュール:自分で作った関数をほかのプログラムのなかで使う方法がモジュール
          pythonの文を記述したテキストファイルがそのままモジュール

 基本的な関数は組み込みライブラリー提供している。
 自分で関数を書き起こす前にドキュメントを調べる。
 モジュールが正しくインポートされるためには、そのモジュールがモジュール検索パスにふくまれて い なくてはならない。

 >>> import sys
 >>> sys.path       # モジュール検索パスのリスト
 ['C:\\Python30\\Lib\\idlelib', 'C:\\WINDOWS\\system32\\python30.zip', 'C:\\Python30
 \\DLLs', 'C:\\Python30\\lib', 'C:\\Python30\\lib\\plat-win', 'C:\\Python30', 'C:\\Python30
 \\lib\\site-packages']

 パッケージ
 複数のモジュールを含んだディレクトリ。

 モジュールがファイル単位で構成されるのに対し、パッケージはディレクトリ単位で構成される。名前に階層構 
 造 を作る。モジュールの数が増える場合。
 ディレクトリの中に__int__pyというファイルを配置する。
 パッケージはモジュールと同じように利用できる。
 パッケージ名はパッケージのトップレベルのディレクトリ名と同じ。
 一番簡単なパッケージを作る。
 パッケージをインポートする。

   知は外から情報として告げ知らされはしない。むしろ内部に向けて、無限の否定を反復することによって、しだ
 いに近接していくべきものだ

 (対話という思想 プラトンの方法序説・内山勝利著。岩波書店)
 ホーム     戻る