Wie sehe ich den Typ einer Variablen, ob es 32 Bit ohne Vorzeichen, 16 Bit mit Vorzeichen usw. ist?
Wie sehe ich es?
Wie sehe ich den Typ einer Variablen, ob es 32 Bit ohne Vorzeichen, 16 Bit mit Vorzeichen usw. ist?
Wie sehe ich es?
Python hat nicht die gleichen Typen wie C / C ++, was Ihre Frage zu sein scheint.
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
Der Unterschied zwischen int und long geht jedoch in Python 3.0 verloren.
Du suchst vielleicht nach dem type()
Funktion.
Siehe die folgenden Beispiele, aber es gibt in Python keinen "unsigned" -Typ wie Java.
Positive ganze Zahl:
>>> v = 10
>>> type(v)
<type 'int'>
Groß positive ganze Zahl:
>>> v = 100000000000000
>>> type(v)
<type 'long'>
Negative Ganzzahl:
>>> v = -10
>>> type(v)
<type 'int'>
Buchstabenfolge:
>>> 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 bestimmt man den Variablentyp in Python?
Wenn Sie also eine Variable haben, zum Beispiel:
one = 1
Sie möchten seinen Typ wissen?
Es gibt richtige Wege und falsche Wege, um alles in Python zu machen. Hier ist der richtige Weg:
type
>>> type(one)
<type 'int'>
Du kannst den ... benutzen __name__
Attribut, um den Namen des Objekts zu erhalten. (Dies ist eines der wenigen speziellen Attribute, das Sie verwenden müssen __dunder__
Name zu erreichen - es gibt nicht einmal eine Methode dafür inspect
Modul.)
>>> type(one).__name__
'int'
__class__
In Python sind Namen, die mit Unterstrichen beginnen, semantisch nicht Teil der öffentlichen API, und es ist eine bewährte Methode für Benutzer, sie nicht zu verwenden. (Außer wenn absolut notwendig.)
Schon seit type
gibt uns die Klasse des Objekts, wir sollten vermeiden, dies direkt zu bekommen. :
>>> 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, so dass Typ seltsam erscheint. Beispielsweise:
class Foo(object):
def foo(self):
self.__class__
Nicht. Geben Sie stattdessen (selbst) Folgendes ein:
class Foo(object):
def foo(self):
type(self)
Wie sehe ich den Typ einer Variablen, ob es 32 Bit ohne Vorzeichen, 16 Bit mit Vorzeichen usw. ist?
In Python sind diese Details Implementierungsdetails. Im Allgemeinen kümmern wir uns in Python normalerweise nicht darum. Um jedoch Ihre Neugier zu sättigen ...
In Python 2 ist int normalerweise eine Ganzzahl mit Vorzeichen, die der Implementierung entspricht Wort Breite (vom System begrenzt). Es wird normalerweise als implementiert lang in C. Wenn ganze Zahlen größer werden, konvertieren wir sie normalerweise in Python-Longs (mit unbegrenzter Genauigkeit, nicht mit C Longs zu verwechseln).
Zum Beispiel können wir in einem 32-Bit-Python 2 folgern, dass int eine 32-Bit-Ganzzahl mit Vorzeichen ist:
>>> import sys
>>> format(sys.maxint, '032b')
'01111111111111111111111111111111'
>>> format(-sys.maxint - 1, '032b') # minimum value, see docs.
'-10000000000000000000000000000000'
In Python 3 geht der alte int weg und wir benutzen (Python's) nur long als int, was hat unbegrenzte Präzision.
Wir können auch Informationen über Pythons Floats erhalten, die normalerweise als doppelt in C:
>>> 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)
Benutze es nicht __class__
, eine semantisch nicht öffentliche API, um den Typ einer Variablen zu erhalten. Benutzen type
stattdessen.
Sorgen Sie sich nicht zu sehr um die Implementierungsdetails von Python. Ich musste mich selbst nicht mit Problemen befassen. Sie werden es wahrscheinlich auch nicht, und wenn Sie es wirklich tun, sollten Sie genug wissen, um nicht auf diese Antwort zu schauen, was zu tun ist.
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'>
Die Frage ist etwas zweideutig - ich bin mir nicht sicher, was Sie mit "Ansicht" meinen. Wenn Sie es versuchen Abfrage der Typ eines nativen Python-Objekts, @atzzDie Antwort wird dich in die richtige Richtung lenken.
Wenn Sie es jedoch versuchen generieren Python-Objekte mit der Semantik primitiver C-Typen (wie z uint32_t
, int16_t
), benutze die struct
Modul. Sie können so die Anzahl der Bits in einem gegebenen C-Typ-Primitiv 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 in der array
Modul, das Arrays dieser untergeordneten Typen erstellen kann:
>>> array.array('c').itemsize # char
1
Die maximal unterstützte Ganzzahl (Python 2's int
) ist gegeben durch sys.maxint.
>>> import sys, math
>>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness
32.0
Es gibt auch sys.getsizeof, die die tatsächliche Größe des zurückgegeben wird Python Objekt im Restspeicher:
>>> a = 5
>>> sys.getsizeof(a) # Residual memory.
12
Verwenden Sie für Floatdaten 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)
print type(variable_name)
Ich empfehle auch die IPython Interaktiver Dolmetscher bei solchen Fragen. Es lässt Sie tippen variable_name?
und gibt eine vollständige Liste von Informationen über das Objekt einschließlich des Typs und der Doc-Zeichenfolge für den Typ zurück.
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
Konvertieren Sie einen String oder eine Zahl nach Möglichkeit in eine ganze Zahl. Ein Gleitkomma-Argument wird in Richtung Null abgeschnitten (dies schließt keine Zeichenfolge ein) Darstellung einer Fließkommazahl!) Verwenden Sie beim Konvertieren einer Zeichenkette die optionale Basis. Es ist ein Fehler, beim Konvertieren von a eine Base anzugeben Nicht-Zeichenfolge. Wenn das Argument außerhalb des Ganzzahlbereichs liegt, ein langes Objekt wird stattdessen zurückgegeben.
Es kann wenig irrelevant sein. aber Sie können die Typen eines Objekts mit überprüfen isinstance(object, type)
wie erwähnt Hier.
Meinst du? Python oder verwenden Ctypes?
Im ersten Fall können Sie einfach nicht - weil Python keine 16/32-Bit-Ganzzahlen hat.
Im zweiten Fall können Sie verwenden type()
:
>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)
<class 'ctypes.c_ulong'>
Für mehr Referenz auf Ctypes, ein seiner Art, siehe die offizielle Dokumentation.