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