pythonダイナミックタイプの使用例

1701 ワード

この例ではpythonのダイナミックな強いタイプの使用法を解析した.皆さんの参考にしてください.具体的には以下の通りです.
Python変数の宣言と定義
C#とは異なり、Pythonは変数を使用する前にそのタイプを定義する必要はなく、次の例を実行してみます.

i = 12 print i

以上から、変数iは使用前に定義する必要はありませんが、変数を宣言して初期化する必要があります.次の例を実行してみます.

i = 1
print i + j

上のコードでは、「NameError:name'j'is not defined」という異常が発生します.Pythonプロンプト変数jは定義されていません.これはBASICなどの弱いタイプの言葉とは違います.BASICでは、上記のコードを実行しても異常は発生しません.EXCELのVBA開発環境で試して、printをMsgBoxに変更すれば、結果は1を出力します.これはPythonがBASICのような弱い言語ではないことを示している.
一方、PythonとC#には大きな違いがあります.プログラムの実行中に、同じ変数名が異なるタイプのデータを表すことができます.次の例を見てみましょう.

i = 1
print i,type(i),id(i)
i = 10000000000
print i,type(i),id(i)
i = 1.1
print i,type(i),id(i)

変数iのタイプは、プログラム実行中にint、long、floatの変化をそれぞれ経験し、これは、Cなどの静的タイプ言語とは大きく異なります.静的言語は、1つの変数が1つのデータ型を取得すると、常にこのタイプになります.変数名は、データを格納するためのメモリ位置を表します.Pythonで使用される変数名は、各種のデータおよびオブジェクトの参照にすぎません.id()で取得されるのが、データを格納するメモリ位置です.私たちが入力した1、10000000、1.1の3つのデータは、ゴミ回収車がそれを引っ張るまでid()が示すメモリ位置に保存されます(システムが使用しないと判断したとき).これは動的言語の典型的な特徴であり、変数のクラスが値を付与するときに決定されます.
一方、Pythonは強いタイプで、次の例を実行してみます.

# -*- coding: utf-8 -*-
i = 10; j = 'ss'
print i+j
#      print str(i)+j,  10ss

「TypeError:unsupported operand type(s)for+:'int'and'str'」という異常が発生します.BASICなどの弱い言語では、上記の例が正常に動作し(予期せぬ場合があるが)結果が返されます.
だから、Pythonはダイナミックなタイプの言語であり、強いタイプの言語でもあると言っています.これはC#とは違います.Pythonのこのような変数の宣言、定義、使用方法については、C#プログラマーが適応するのに時間がかかるかもしれませんが、すぐに好きになると信じています.さらに、C 4.0は変数を同様に定義し、使用し始めています(変数名にキーワードdynamicを付けることで)、Python変数を先に学ぶと、C 4.0のダイナミックプログラミングの特徴に早く適応することができます.
ここで述べたことが皆さんのPythonプログラム設計に役立つことを願っています.