Wie sehe ich den Typ einer Variablen, ob sie 32 Bit ohne Vorzeichen, 16 Bit mit Vorzeichen usw. ist?
Wie sehe ich es an?
Python hat nicht die gleichen Typen wie C/C++, was anscheinend Ihre Frage ist.
Versuche dies:
>>> 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
Die Unterscheidung zwischen int und long geht jedoch in Python 3.0 verloren.
Möglicherweise suchen Sie nach der Funktion type()
.
Siehe die folgenden Beispiele, aber es gibt keinen "vorzeichenlosen" Typ in Python genau wie in Java.
Positive ganze Zahl:
>>> v = 10
>>> type(v)
<type 'int'>
Large positive ganze Zahl:
>>> v = 100000000000000
>>> type(v)
<type 'long'>
Negative ganze Zahl:
>>> v = -10
>>> type(v)
<type 'int'>
Literale Zeichenfolge:
>>> v = 'hi'
>>> type(v)
<type 'str'>
Gleitkommazahl:
>>> v = 3.14159
>>> type(v)
<type 'float'>
Es ist so einfach Du machst es so.
print(type(variable_name))
Wie bestimme ich den Variablentyp in Python?
Wenn Sie also eine Variable haben, zum Beispiel:
one = 1
Sie möchten den Typ wissen?
In Python gibt es richtige und falsche Vorgehensweisen. Hier ist der richtige Weg:
type
>>> type(one)
<type 'int'>
Sie können das __name__
-Attribut verwenden, um den Namen des Objekts abzurufen. (Dies ist eines der wenigen speziellen Attribute, zu denen Sie den Namen __dunder__
verwenden müssen - im Modul inspect
gibt es nicht einmal eine Methode dafür.)
>>> type(one).__name__
'int'
__class__
In Python sind Namen, die mit Unterstrichen beginnen, semantisch kein Bestandteil der öffentlichen API, und es wird empfohlen, sie nicht zu verwenden. (Ausgenommen wenn unbedingt nötig.)
Da type
uns die Klasse des Objekts gibt, sollten wir vermeiden, dies direkt zu erhalten. :
>>> one.__class__
Dies ist normalerweise die erste Idee, die Menschen haben, wenn sie auf den Typ eines Objekts in einer Methode zugreifen - sie suchen bereits nach Attributen, daher scheint Typ seltsam. Zum Beispiel:
class Foo(object):
def foo(self):
self.__class__
Nicht. Geben Sie stattdessen Folgendes ein (self):
class Foo(object):
def foo(self):
type(self)
Wie sehe ich den Typ einer Variablen, ob sie 32-Bit ohne Vorzeichen, 16-Bit mit Vorzeichen usw. ist?
In Python sind diese Details Implementierungsdetails. Im Allgemeinen sorgen wir uns in Python nicht darum. Um Ihre Neugier zu stillen ...
In Python 2 ist int normalerweise eine Ganzzahl mit Vorzeichen, die der Breite Word der Implementierung entspricht (vom System begrenzt). Es wird normalerweise als lang in C implementiert. Wenn ganze Zahlen größer werden, konvertieren wir sie normalerweise in Python Longs (mit unbegrenzter Genauigkeit, nicht zu verwechseln mit C Longs).
In einem 32-Bit-Python 2 können wir beispielsweise ableiten, dass int eine vorzeichenbehaftete 32-Bit-Ganzzahl ist:
>>> import sys
>>> format(sys.maxint, '032b')
'01111111111111111111111111111111'
>>> format(-sys.maxint - 1, '032b') # minimum value, see docs.
'-10000000000000000000000000000000'
In Python 3 verschwindet das alte int, und wir verwenden nur (Python's) long wie int, was nbegrenzte Genauigkeit hat
Wir können auch einige Informationen über Pythons Floats erhalten, die normalerweise als double in C implementiert sind:
>>> 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)
Verwenden Sie nicht __class__
, eine semantisch nicht öffentliche API, um den Typ einer Variablen abzurufen. Verwenden Sie stattdessen type
.
Und sorgen Sie sich nicht zu sehr um die Implementierungsdetails von Python. Ich musste mich nicht selbst mit Problemen auseinandersetzen. Sie werden es wahrscheinlich auch nicht tun, und wenn Sie es wirklich tun, sollten Sie genug wissen, um nicht auf diese Antwort zu schauen, um herauszufinden, was zu tun ist.
print type(variable_name)
Bei solchen Fragen kann ich auch den interaktiven Interpreter IPython empfehlen. Hiermit können Sie variable_name?
eingeben und eine ganze Liste von Informationen über das Objekt einschließlich des Typs und der Dokumentzeichenfolge für den Typ zurückgeben.
z.B.
In [9]: var = 123
In [10]: var?
Type: int
Base Class: <type 'int'>
String Form: 123
Namespace: Interactive
Docstring:
int(x[, base]) -> integer
Wenn möglich, konvertieren Sie eine Zeichenfolge oder Zahl in eine Ganzzahl. Ein Gleitkomma-Argument wird gegen Null abgeschnitten (dies schließt keine Zeichenfolgendarstellung einer Gleitkommazahl ein!). Verwenden Sie beim Konvertieren einer Zeichenfolge die optionale Basis. Es ist ein Fehler, beim Konvertieren einer Nicht-Zeichenfolge eine Basis anzugeben. Wenn das Argument außerhalb des Integer-Bereichs liegt, wird stattdessen ein langes Objekt zurückgegeben.
Ein weiterer Weg mit __class__
:
>>> a = [1, 2, 3, 4]
>>> a.__class__
<type 'list'>
>>> b = {'key1': 'val1'}
>>> b.__class__
<type 'dict'>
>>> c = 12
>>> c.__class__
<type 'int'>
Beispiele für die einfache Typprüfung in Python:
assert type(variable_name) == int
assert type(variable_name) == bool
assert type(variable_name) == list
a = "cool"
type(a)
//result
<class 'str'>
or do `dir(a)` to see the list of inbuilt methods you can have on the variable.
Die Frage ist etwas mehrdeutig - ich bin mir nicht sicher, was Sie mit "Ansicht" meinen. Wenn Sie versuchen, den Typ eines nativen Python -Objekts abzufragen , @ atzz 's Antwort wird Sie in die richtige Richtung lenken.
Wenn Sie jedoch versuchen Python Objekte zu generieren, die die Semantik von primitiven C-Typen haben (z. B. uint32_t
, int16_t
) ), benutze das struct
Modul. Sie können die Anzahl der Bits in einem gegebenen C-Typ-Grundelement folgendermaßen bestimmen:
>>> struct.calcsize('c') # char
1
>>> struct.calcsize('h') # short
2
>>> struct.calcsize('i') # int
4
>>> struct.calcsize('l') # long
4
Dies spiegelt sich auch im Modul array
wider, das Arrays mit den folgenden untergeordneten Typen erstellen kann:
>>> array.array('c').itemsize # char
1
Die maximal unterstützte Ganzzahl (Python 2 int
) wird durch sys.maxint angegeben.
>>> import sys, math
>>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness
32.0
Es gibt auch sys.getsizeof , das die tatsächliche Größe des Python Objekts im Restspeicher zurückgibt:
>>> a = 5
>>> sys.getsizeof(a) # Residual memory.
12
Verwenden Sie für Float-Daten und Präzisionsdaten 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)
Es kann wenig irrelevant sein. Sie können jedoch die Objekttypen mit isinstance(object, type)
wie erwähnt überprüfen hier .
Meinen Sie in Python oder mit ctypes ?
Im ersten Fall ist dies einfach nicht möglich, da Python keine 16/32-Bit-Ganzzahlen mit oder ohne Vorzeichen hat.
Im zweiten Fall können Sie type()
verwenden:
>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)
<class 'ctypes.c_ulong'>
Weitere Hinweise zu ctypes und seinem Typ finden Sie in der offiziellen Dokumentation .
In Python gibt es solche Typen nicht, wie Sie sie beschreiben. Es gibt zwei Typen, die zur Darstellung von Integralwerten verwendet werden: int
, das dem Int-Typ der Plattform in C entspricht, und long
, das eine Ganzzahl mit willkürlicher Genauigkeit ist (dh es wächst nach Bedarf und hat keine obere Grenze). int
s werden stillschweigend in long
konvertiert, wenn ein Ausdruck ein Ergebnis liefert, das nicht in int
gespeichert werden kann.
Einfach, für python 3.4 und höher
print (type(variable_name))
Python 2.7 und höher
print type(variable_name)
Es kommt wirklich darauf an, welches Level du meinst. In Python 2.x gibt es aus historischen Gründen zwei Integer-Typen: int
(beschränkt auf sys.maxint
) und long
(unbegrenzte Genauigkeit). In Python-Code sollte dies keinen Unterschied machen, da der Interpreter automatisch in long konvertiert, wenn eine Zahl zu groß ist. Wenn Sie wissen möchten, welche Datentypen im zugrunde liegenden Interpreter tatsächlich verwendet werden, ist dies von der Implementierung abhängig. (CPythons befinden sich in Objects/intobject.c und Objects/longobject.c.) Informationen zu den Systemtypen finden Sie unter cdleary answer für die Verwendung des struct-Moduls.
Verwenden Sie für python2.x
print type(variable_name)
Verwenden Sie für python3.x
print(type(variable_name))