it-swarm.com.de

Wie bestimme ich den Typ einer Python -Variablen?

Wie sehe ich den Typ einer Variablen, ob sie 32 Bit ohne Vorzeichen, 16 Bit mit Vorzeichen usw. ist?

Wie sehe ich es an?

1349
user46646

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.

1200
gregjor

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'>
391
Srikanth

Es ist so einfach Du machst es so.

print(type(variable_name))
156
Vaibhav

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:

Benutze 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'

Benutze nicht __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)

Implementierungsdetails von Ints und Floats

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)

Fazit

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.

95
Aaron Hall
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.

56

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'>
37
アレックス

Beispiele für die einfache Typprüfung in Python:

assert type(variable_name) == int

assert type(variable_name) == bool

assert type(variable_name) == list
29
anh_ng8
a = "cool"
type(a)
//result
<class 'str'>

or do `dir(a)` to see the list of inbuilt methods you can have on the variable.
24
lilhamad

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)
24
cdleary

Es kann wenig irrelevant sein. Sie können jedoch die Objekttypen mit isinstance(object, type) wie erwähnt überprüfen hier .

24
skjoshi

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 .

18
rob

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). ints werden stillschweigend in long konvertiert, wenn ein Ausdruck ein Ergebnis liefert, das nicht in int gespeichert werden kann.

15
atzz

Einfach, für python 3.4 und höher

print (type(variable_name))

Python 2.7 und höher

print type(variable_name)
10
Priyansh

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.

10

Verwenden Sie für python2.x

print type(variable_name)

Verwenden Sie für python3.x

print(type(variable_name))
7
Prince Dhadwal