1. type, isinstance 関数で、変数の型を調べる
Python で、変数の中身が、どのクラスに所属するのか、または、関数なのか調べたい。
2.1 組み込み関数 によると、 (装飾は、引用者による)
type(object) object の型を返します。返される値は型オブジェクトです。
例えば、「数値」の場合、次のようにして、数値に対して type 関数を適用する。isinstance(object, classinfo) 引数 object が引数 classinfo のインスタンスであるか、 (直接または間接的な) サブクラスのインスタンスの場合に真を返します。
print type(100) #=> <type 'int'>type 関数の結果を用いて、isinstance 関数の引数に指定した。
print isinstance(100, int) #=> True
追記 (2011.12.10) : Python 2.6 では、型の検査として、type 関数は推奨されていない。
type(object)(原文) object の型を返します。オブジェクトの型の検査には isinstance() 組み込み関数を使うことが推奨されます。
関数に対して、type 関数は使えない
次に、関数に対して、type 関数を適用してみる。
def hoge(): pass print type(hoge) #=> <type 'function'> print isinstance(hoge, function) # ここでエラー
実行したら、以下のエラーが表示された。
exceptions.NameError: name 'function' is not defined
あれ? (+_+)
2. types モジュールに、型の名前が定義されている
先ほどの type 関数の説明の続きに、 次のようにある。
標準モジュール types は、組み込み名を持っていない全ての組み込み型の名前を定義しています。
(同上より、装飾は引用者による)
3.6 types -- 組み込み型の名前 を参照すると、型の一覧が書かれていた。
このモジュールは標準のPythonインタプリタで使われているオブジェクトの型について、名前を定義しています
(同上より)
これによると、「関数」は、
- FunctionType
- ユーザー定義の関数またはlambdaの型です。
- LambdaType
FunctionType
の別名です。
よって、次のように書ける。
import types print type(hoge) is types.FunctionType print isinstance(hoge, types.FunctionType)
ちなみに、isinstance 関数において str , int などを型として利用できる理由は、 次の通り。
Python 2.2以降では、int() や str()のようなファクトリ関数は、型の名前となりましたので、typesを使用する必要はなくなりました。
(同上より)
0コメント:
コメントを投稿