互換が無い。ソースコードの書き方に違いがある。
・対応ライブラリの数
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 件のコメント:
コメントを投稿