Pythonで変数の型が特定の種類かどうかを確認したい。たとえば、varx
が int かどうかを確認したい。
>>x=10
>>type(x)
<type 'int'>
しかし、どうすればそれらのタイプを比較できますか。これを試しましたが、うまくいかないようです。
if type(10)== "<type 'int'>":
print 'yes'
これどうやってするの ?
Pythonで変数の型が特定の種類かどうかを確認したい。たとえば、varx
が int かどうかを確認したい。
>>x=10
>>type(x)
<type 'int'>
しかし、どうすればそれらのタイプを比較できますか。これを試しましたが、うまくいかないようです。
if type(10)== "<type 'int'>":
print 'yes'
これどうやってするの ?
あなたの例は次のように書くことができます:
if type(10) is int: # "==" instead of "is" would also work.
print 'yes'
ただし、正確に希望どおりに機能しない場合があることに注意してください。たとえば、(そのような数値のタイプである)がではないため、単にの代わりに、10L
またはそれより大きい数値を書き込んだ場合、yesは出力されません。sys.maxint
10
long
int
もう1つの方法は、Martijnがすでに提案しているように、isinstance()
組み込み関数を次のように使用することです。
if isinstance(type(10), int):
print 'yes'
insinstance(instance, Type)
インスタンスのタイプがから派生している場合True
だけでなく、も返します。したがって、これのサブクラスはとに対しても機能するためです。type(instance) is Type
Type
bool
int
True
False
ただし、一般的には特定のタイプをチェックしない方が良いですが、機能については必要です。つまり、コードが型を処理できない場合、型に対してサポートされていない操作を実行しようとすると、自動的に例外がスローされます。
ただし、整数や浮動小数点数などを別の方法で処理する必要がある場合は、が、、、またはこのクラスから派生したユーザー定義型であるかどうかを評価する(needs)を確認することをお勧めしisinstance(var, numbers.Integral)
ますimport numbers
。標準の型階層と[モジュール]に関するPythonのドキュメントを参照してください。True
var
int
long
bool
numbers
isinstance()
関数を使用して、特定のタイプをテストします。
isinstance(x, int)
isinstance()
テストする単一の型または型のタプルのいずれかを取ります。
isinstance(x, (float, complex, int))
たとえば、一連の異なる数値型をテストします。
次の方法を使用できます。
>>> isinstance('ss', str)
True
>>> type('ss')
<class 'str'>
>>> type('ss') == str
True
>>>
整数 - >整数
float -> 浮動小数点値
リスト -> リスト
タプル -> タプル
辞書 -> 辞書
クラスの場合は少し異なります: 古い型のクラス:
>>> # We want to check if cls is a class
>>> class A:
pass
>>> type(A)
<type 'classobj'>
>>> type(A) == type(cls) # This should tell us
新しい型クラス:
>>> # We want to check if cls is a class
>>> class B(object):
pass
>>> type(B)
<type 'type'>
>>> type(cls) == type(B) # This should tell us
>>> #OR
>>> type(cls) == type # This should tell us