2014年9月18日木曜日

Pythonの学習(4)

(1) バージョン(2.x系と3.x系)
互換が無い。ソースコードの書き方に違いがある。
対応ライブラリの数
 2.x系の方が多いと思われる。3.x系は今後増えると思われる。
(2.xにある機能が3.xにない場合があるので、現状は2.xで開発する方がいいと思う)
パッケージの再構成
 3.xと2.xで標準ライブラリの中身も変わっているので、注意
print文の関数化
 3.x系からprint文が関数化されてます。

<2.x>
 print "test"

 obj = open("test.txt","w")
 print >> obj , "test" 
<3.x>
 print("test")

 obj = open("test.txt","w")
 print("test",file=obj) 

文字列の型
  2.x系の文字列の型は「unicode」と「str」の2種類が存在している。
  3.x系は、Unicodeへ統一された。

(2)クラス継承
クラスの作り方は、特に気にする点はないので、説明を省略します。
ここでは、継承の仕方を説明します。

「list」を継承してクラスを作成し、値が追加された際にprint出力する例です。
「__init__」は、クラスの初期化時に実行される関数となります。
第一引数の「self」は、クラスのインスタンス自身を表します。

class TestExtends(list):
    def __init__(self)
        list.__init__(self)

    def append(self,value): 
        list.append(self,value)
        print u"値が追加されました:" + str(value) 


(3)パッケージ化
パッケージの基礎 
パッケージのインポートをする際には「sys」モジュールの「path」内に記述されているディレクトリ配下にモジュールを置きます。

デフォルトのパス以外の場所に置きたい場合は、インポートを実行する前にパスを追加します。
例として、「c:/Python27/com」配下に「moto」を用意し、「plus_test」モジュールを作成します。
階層は下記の通りです。

 c:
   +--- Python27(ディレクトリ)
        +--- com(ディレクトリ)
             +--- moto(ディレクトリ)
                 +--- plus_test.py(モジュールファイル)

パッケージであると認識させるため、「__init__.py」というファイル名で初期化ファイルを用意し、それぞれのディレクトリへ配置します。「__init__.py」ファイルの中身は空で問題ありません。

 c:
   +--- Python27(ディレクトリ)
        +--- com(ディレクトリ)
        +--- __init__.py(初期化ファイル)
             +--- moto(ディレクトリ)
             +--- __init__.py(初期化ファイル)
                   +--- plus_test.py(モジュールファイル)
                   +--- __init__.py(初期化ファイル)

次のような感じです。


パッケージのインポート
 今回インポートを行う「plus_test」モジュールのコードは下記の通りとなります。
「c:/python/com/moto」ディレクトリに保存します。
ファイル名を指定して実行にて、「cmd」を入力して、DOS窓を開きます。
「cd c:\」でCディレクトリに移動します

 # -*- coding: utf-8 -*-

def plusValue(value_1,value_2):
    return value_1 + value_2

 続いてモジュールのインポートを行い「plusValue」関数を呼び出すコードを記載します。
例えば、以下のコードを記載して、[ライブラリ\ドキュメント]直下に保存します。

# -*- coding: utf-8 -*-
import sys

if __name__ == "__main__":

    sys.path.append("c:/Python27")      # パスの追加

    import com.moto.plus_test                  # パッケージのインポート
    print com.moto.plus_test.plusValue(1,1)   # 結果を出力

「パスの追加」にて、追加したパスをインタプリタが見てくれるようになります。
パッケージのインポートは、「 . 」(ドット)をセパレータとして使用し、対象のモジュールのインポートを行っています。
そして、モジュール内の「plusValue」関数を呼び出し、結果を取得・表示します。

以下が実際に実行した結果です。2が出力されていることがわかり。作成したモジュールが実行されていることが分かります。






 

0 件のコメント:

コメントを投稿