2075 Stimmen

Wie bestimmt man den Typ einer Python-Variablen?

Wie kann ich den Typ einer Variablen erkennen? (z. B. unsigned 32 bit)

1921voto

gregjor Punkte 20302

Verwenden Sie die type() eingebauten Funktion:

>>> i = 123
>>> type(i)
<type 'int'>
>>> type(i) is int
True
>>> i = 123.456
>>> type(i)
<type 'float'>
>>> type(i) is float
True

Um zu prüfen, ob eine Variable von einem bestimmten Typ ist, verwenden Sie isinstance :

>>> i = 123
>>> isinstance(i, int)
True
>>> isinstance(i, (float, str, set, dict))
False

Beachten Sie, dass Python nicht die gleichen Typen wie C/C++ hat, was Ihre Frage zu sein scheint.

4 Stimmen

Eine Anmerkung (da die Frage nach Zahlen gestellt wurde) - bool ist eine Unterklasse von int. Daher wird isinstance(True, int) oder isinstance(False, int) True zurückgeben.

519voto

Srikanth Punkte 11530

Sie suchen vielleicht nach dem type() eingebaute Funktion .

Siehe die Beispiele unten, aber es gibt in Python keinen "unsigned"-Typ wie in Java.

Positive Ganzzahl:

>>> v = 10
>>> type(v)
<type 'int'>

Groß positive ganze Zahl:

>>> v = 100000000000000
>>> type(v)
<type 'long'>

Negative Ganzzahl:

>>> v = -10
>>> type(v)
<type 'int'>

Wörtliche Abfolge von Zeichen:

>>> v = 'hi'
>>> type(v)
<type 'str'>

Ganzzahlige Fließkommazahl:

>>> v = 3.14159
>>> type(v)
<type 'float'>

1 Stimmen

Ich musste zweimal hinschauen, als ich das sah. Java SE8 enthält jetzt vorzeichenlose Ganzzahlen, und ich habe so viel damit entwickelt, dass es mir sündhaft vorkommt, dass Java vor SE8 nie vorzeichenlose Ganzzahlen hatte.

211voto

Vaibhav Punkte 2406

Es ist so einfach. Du machst es so.

print(type(variable_name))

151voto

Wie bestimmt man den Variablentyp in Python?

Wenn Sie also eine Variable haben, zum Beispiel:

one = 1

Sie wollen den Typ wissen?

Es gibt richtige und falsche Wege, um so ziemlich alles in Python zu tun. Hier ist der richtige Weg:

Utilisez type

>>> type(one)
<type 'int'>

Sie können die __name__ Attribut, um den Namen des Objekts zu erhalten. (Dies ist eines der wenigen speziellen Attribute, die Sie für die Verwendung des __dunder__ Namen zu erreichen - es gibt nicht einmal eine Methode dafür in der inspect Modul).

>>> type(one).__name__
'int'

Verwenden Sie nicht __class__

In Python sind Namen, die mit Unterstrichen beginnen, semantisch nicht Teil der öffentlichen API, und es ist eine bewährte Praxis für Benutzer, diese zu vermeiden. (Außer wenn es unbedingt notwendig ist.)

Seit type gibt uns die Klasse des Objekts, wir sollten es vermeiden, diese direkt zu erhalten. :

>>> one.__class__

Dies ist in der Regel der erste Gedanke, den Menschen haben, wenn sie in einer Methode auf den Typ eines Objekts zugreifen - sie suchen bereits nach Attributen, so dass der Typ seltsam erscheint. Zum Beispiel:

class Foo(object):
    def foo(self):
        self.__class__

Tun Sie es nicht. Tun Sie stattdessen type(self):

class Foo(object):
    def foo(self):
        type(self)

Einzelheiten zur Implementierung von Ints und Floats

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

In Python sind diese Besonderheiten Details der Implementierung. Im Allgemeinen machen wir uns in Python also keine Gedanken darüber. Aber um Ihre Neugierde zu stillen...

In Python 2 ist int in der Regel eine ganze Zahl mit Vorzeichen, die dem Wert der Implementierung Wort Breite (durch das System begrenzt). Sie wird normalerweise als lang in C . Wenn Ganzzahlen 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 zum Beispiel 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 der alte int, und wir verwenden nur noch (Pythons) long als int, das über unbegrenzte Präzision.

Wir können auch einige 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)

Schlussfolgerung

Verwenden Sie nicht __class__ eine semantisch nicht-öffentliche API, um den Typ einer Variablen zu ermitteln. verwenden type stattdessen.

Und machen Sie sich nicht zu viele Gedanken über die Implementierungsdetails von Python. Ich habe mich selbst noch nicht mit solchen Problemen auseinandersetzen müssen. Das werden Sie wahrscheinlich auch nicht, und wenn doch, sollten Sie genug wissen, um nicht in dieser Antwort nachzuschauen, was zu tun ist.

74voto

Lawrence Johnston Punkte 62528
print type(variable_name)

Ich empfehle auch die IPython interaktive Dolmetscher, wenn es um Fragen wie diese geht. Damit können Sie eingeben variable_name? und gibt eine ganze Liste von Informationen über das Objekt zurück, einschließlich des Typs und des Doc-Strings für den Typ.

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

Konvertiert eine Zeichenkette oder eine Zahl in eine Ganzzahl, wenn möglich. Ein Fließkomma-Argument wird gegen Null abgeschnitten (dies gilt nicht für eine Zeichenkette Darstellung einer Fließkommazahl!) Bei der Konvertierung einer Zeichenkette ist die optionale Basis zu verwenden. Es ist ein Fehler, eine Basis anzugeben, wenn eine Nicht-Zeichenkette. Liegt das Argument außerhalb des Ganzzahlbereichs, wird ein Long-Objekt zurückgegeben.

2 Stimmen

Ich fragte nach unsigned int, signed int usw.

4 Stimmen

print type(str) gibt in Python 3.6 einen Fehler zurück. verwenden type(str)

7 Stimmen

@KolobCanyon das ist, weil in 3.x, Druck braucht Klammern: print(type(str))

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X