Wie kann ich den Typ einer Variablen erkennen? (z. B. unsigned 32 bit)
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.
Wie kann ich den Typ einer Variablen erkennen? (z. B. unsigned 32 bit)
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.
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'>
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:
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'
__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)
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)
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.
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.
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.