符号なし32ビット、符号付き16ビットなど、変数の型を確認するにはどうすればよいですか。
どうやって見るの?
PythonにはC/C++と同じ型はありません。
これを試して:
>>> i = 123
>>> type(i)
<type 'int'>
>>> type(i) is int
True
>>> i = 123456789L
>>> type(i)
<type 'long'>
>>> type(i) is long
True
>>> i = 123.456
>>> type(i)
<type 'float'>
>>> type(i) is float
True
Intとlongの違いは、Python 3.0ではなくなりました。
あなたはtype()
関数を探しているかもしれません。
以下の例を参照してください。ただし、PythonのようにJavaのような「符号なし」の型はありません。
正の整数:
>>> v = 10
>>> type(v)
<type 'int'>
大きい 正の整数
>>> v = 100000000000000
>>> type(v)
<type 'long'>
負の整数
>>> v = -10
>>> type(v)
<type 'int'>
文字のリテラルシーケンス
>>> v = 'hi'
>>> type(v)
<type 'str'>
浮動小数点整数
>>> v = 3.14159
>>> type(v)
<type 'float'>
とても簡単です。あなたはそれをこうやってやります。
print(type(variable_name))
Pythonで変数タイプを判断する方法
たとえば変数があるとします。
one = 1
あなたはその種類を知りたいですか?
Pythonですべてについて正しいことをする方法と間違った方法があります。正しい方法は次のとおりです。
type
を使う>>> type(one)
<type 'int'>
__name__
属性を使ってオブジェクトの名前を取得することができます。 (これは__dunder__
という名前を使うために必要ないくつかの特別な属性の一つです - inspect
モジュールにはそのためのメソッドさえありません。)
>>> type(one).__name__
'int'
__class__
を使用しないPythonでは、アンダースコアで始まる名前は意味的にはパブリックAPIの一部ではないため、ユーザーがそれらを使用しないようにするのがベストプラクティスです。 (どうしても必要な場合を除く)
type
は私たちにオブジェクトのクラスを与えるので、これを直接取得することは避けるべきです。 :
>>> one.__class__
これは通常、メソッド内でオブジェクトの型にアクセスするときに最初に考えられることです - 彼らはすでに属性を探しているので、型は奇妙に思えます。例えば:
class Foo(object):
def foo(self):
self.__class__
しないでください。代わりに、(self)と入力してください。
class Foo(object):
def foo(self):
type(self)
符号なし32ビット、符号付き16ビットなど、変数の型を確認するにはどうすればよいですか。
Pythonでは、これらの詳細は実装の詳細です。そのため、一般的に、私たちは通常Pythonでこれについて心配しません。しかし、あなたの好奇心を満たすために...
Python 2では、intは通常、実装の Word widthに等しい符号付き整数です(システムによる制限)。通常は C言語では長い として実装されています。整数がこれより大きくなると、通常、Pythonのlongに変換します(Cのlongと混同しないように、精度は無制限です)。
たとえば、32ビットPython 2では、intは符号付き32ビット整数であると推測できます。
>>> import sys
>>> format(sys.maxint, '032b')
'01111111111111111111111111111111'
>>> format(-sys.maxint - 1, '032b') # minimum value, see docs.
'-10000000000000000000000000000000'
Python 3では、古いintは廃止され、私たちはintとしてlong(Pythonの)を使います。これは 無制限の精度 を持ちます。
Pythonのフロートについての情報も得られます。これは通常Cの double として実装されています。
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, Dig=15,
mant_Dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)
意味的に非公開のAPIである__class__
を変数の型を取得するために使用しないでください。代わりにtype
を使用してください。
そして、Pythonの実装の詳細についてあまり心配しないでください。私はこれ自身の周りの問題に対処する必要はありませんでした。あなたもおそらくどちらもしないでしょう、そしてあなたが本当にするならば、あなたは何をすべきかについてこの答えを見ていないのに十分に知っているべきです。
print type(variable_name)
このような質問に取り組むときは、 IPython 対話型インタプリタを強くお勧めします。それはあなたがvariable_name?
とタイプすることを可能にし、タイプとタイプのためのdoc文字列を含むオブジェクトに関する情報の全リストを返すでしょう。
例えば.
In [9]: var = 123
In [10]: var?
Type: int
Base Class: <type 'int'>
String Form: 123
Namespace: Interactive
Docstring:
int(x[, base]) -> integer
可能であれば、文字列または数値を整数に変換します。浮動小数点引数はゼロに向かって切り捨てられます(これは浮動小数点数の文字列表現を含みません!)文字列を変換するときは、オプションのbaseを使用します。非文字列を変換するときに基数を指定することはエラーです。引数が整数の範囲外の場合は、代わりにlongオブジェクトが返されます。
__class__
を使うもう一つの方法:
>>> a = [1, 2, 3, 4]
>>> a.__class__
<type 'list'>
>>> b = {'key1': 'val1'}
>>> b.__class__
<type 'dict'>
>>> c = 12
>>> c.__class__
<type 'int'>
Pythonでの単純型チェックの例
assert type(variable_name) == int
assert type(variable_name) == bool
assert type(variable_name) == list
質問は多少あいまいです - 私はあなたが "ビュー"によって何を意味するのかわかりません。もしあなたが query をネイティブPythonオブジェクトの型にしようとしているなら、 @atzz の答えは正しい方向へあなたを導いてくれるでしょう。
ただし、プリミティブCタイプのセマンティクスを持つPythonオブジェクト(uint32_t
、int16_t
など)を generate にする場合は、 struct
モジュールを使用します。与えられたC型プリミティブのビット数は、次のように決定できます。
>>> struct.calcsize('c') # char
1
>>> struct.calcsize('h') # short
2
>>> struct.calcsize('i') # int
4
>>> struct.calcsize('l') # long
4
これはarray
モジュールにも反映されています。これにより、これらの低レベルの型の配列を作成できます。
>>> array.array('c').itemsize # char
1
サポートされている最大整数(Python 2のint
)は sys.maxint で与えられます。
>>> import sys, math
>>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness
32.0
sys.getsizeof もあります。これは、残余メモリ内の Python オブジェクトの実際のサイズを返します。
>>> a = 5
>>> sys.getsizeof(a) # Residual memory.
12
浮動小数点データと精度データの場合は、 sys.float_info を使用します。
>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, Dig=15, mant_Dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)
それはほとんど無関係かもしれません。しかし、 here のようにisinstance(object, type)
でオブジェクトの型をチェックすることができます。
Pythonにはあなたが説明するような型はありません。整数値を表すのに使用される2つの型があります:Cのプラットフォームのint型に対応するint
、および任意精度の整数であるlong
(すなわち、必要に応じて成長し上限はありません)。式がint
に格納できない結果を生成した場合、long
は暗黙的にint
に変換されます。
Python 3.4以上では単純
print (type(variable_name))
Python 2.7以上
print type(variable_name)
それは本当にあなたがどのレベルを意味するかによって異なります。 Python 2.xでは、歴史的な理由により、int
(sys.maxint
に制限されている)とlong
(精度が制限されていない)の2つの整数型があります。 Pythonコードでは、数値が大きすぎるとインタプリタが自動的にlongに変換するので、これは少しの違いはありません。基礎となるインタプリタで使用されている実際のデータ型について知りたい場合は、実装に依存します。 (CPythonはObjects/intobject.cとObjects/longobject.cにあります。)システムタイプについて知るためには、structモジュールを使うための答えを見てください。
a = "cool"
type(a)
//result
<class 'str'>
or do `dir(a)` to see the list of inbuilt methods you can have on the variable.
Python2.xの場合は、
print type(variable_name)
Python3.xの場合は、
print(type(variable_name))