Moin zusammen,
ich hoffe eine einfache Frage
gibt es eine Funtion die Überprüft ob ein Wert in einer Variablen ein int ist ?
Danke
Thonix
is integer ?
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Code: Alles auswählen
>>> type(42) is int
True
>>> isinstance(42, int)
True
>>> (42).__class__ is int
True
TUFKAB – the user formerly known as blackbird
Überlege dir aber, warum du das wissen willst. Typabfragen sind häufig ein Zeichen dafür, dass du Programmierparadigmen aus einer anderen Sprache versuchst auf Python anzuwenden; meistens versuchst du den "Look before you leap"-Ansatz, den man in Java und C++ kennt, nachzubasteln.
In Python interessiert es einen nicht, mit was für einem Typ man es zu tun hat, solange er die benutzen Funktionen unterstützt.
Wenn dein Code z.B. zwei Integers addieren will, und du explizit auf Integer prüfst, kann ich nicht meinen Typ "Element von F(5003)" übergeben, auch wenn meiner sich addieren lässt.
In Python interessiert es einen nicht, mit was für einem Typ man es zu tun hat, solange er die benutzen Funktionen unterstützt.
Wenn dein Code z.B. zwei Integers addieren will, und du explizit auf Integer prüfst, kann ich nicht meinen Typ "Element von F(5003)" übergeben, auch wenn meiner sich addieren lässt.
Danke für die Antworten.
ich muss einen wert an eine Funktion weitergeben die unzureichende Typprüfungen macht und auch nur eine dürftige exception schmeißt.
Thonix
ich muss einen wert an eine Funktion weitergeben die unzureichende Typprüfungen macht und auch nur eine dürftige exception schmeißt.
Versteh ich leider nicht - kansst du das noch mal erläutern - bin ja wissbegierigWenn dein Code z.B. zwei Integers addieren will, und du explizit auf Integer prüfst, kann ich nicht meinen Typ "Element von F(5003)" übergeben, auch wenn meiner sich addieren lässt.
Thonix
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Optimalerweise nutzt man in Python wie gesagt eben keine Typprüfungen.thonix hat geschrieben:ich muss einen wert an eine Funktion weitergeben die unzureichende Typprüfungen macht und auch nur eine dürftige exception schmeißt.
Okay, gehen wir davon aus dass jemand sich diese Klasse geschrieben hat, d.h einen Integer-Datentyp der sich wie ein Integer verhält aber noch andere Sachen kann:thonix hat geschrieben:Versteh ich leider nicht - kansst du das noch mal erläutern - bin ja wissbegierigWenn dein Code z.B. zwei Integers addieren will, und du explizit auf Integer prüfst, kann ich nicht meinen Typ "Element von F(5003)" übergeben, auch wenn meiner sich addieren lässt.
Code: Alles auswählen
In [2]: class IntLike(int):
...: def wichtige_extra_funktion(self):
...: print 'Jetzt mache ich was ganz wichtiges'
Code: Alles auswählen
In [3]: il = IntLike(250188)
In [4]: il
Out[4]: 250188
In [5]: il + 1
Out[5]: 250189
Code: Alles auswählen
In [6]: il.wichtige_extra_funktion()
Jetzt mache ich was ganz wichtiges
Code: Alles auswählen
In [7]: def addiere_eins(zahl):
...: if type(zahl) is int:
...: return zahl + 1
...: else:
...: raise TypeError('Kein int')
Code: Alles auswählen
In [8]: addiere_eins(250188)
Out[8]: 250189
Code: Alles auswählen
In [9]: addiere_eins(il)
---------------------------------------------------------------------------
<type 'exceptions.TypeError'> Traceback (most recent call last)
/home/marek/<ipython console> in <module>()
/home/marek/<ipython console> in addiere_eins(zahl)
<type 'exceptions.TypeError'>: Kein int
Daher schreibt man addiere_eins() in Python so:
Code: Alles auswählen
In [10]: def addiere_eins(zahl):
....: return zahl + 1
Code: Alles auswählen
In [11]: addiere_eins(250188)
Out[11]: 250189
In [12]: addiere_eins(il)
Out[12]: 250189
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Man muss ja noch nicht einmal einen selbstgeschriebenen Typ verwenden. Ich würde zum Beispiel von fast jeder Funktion, die ganze Zahlen haben möchte, erwarten das sie auch mit `long` funktioniert:
Ups.
Code: Alles auswählen
In [33]: type(42L) is int
Out[33]: False
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Deswegen nimmt man ja auch isinstance(x, (int, long)), wenn man wirklich nur Pythons Integer-Typen zulassen will.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Thonix!thonix hat geschrieben:gibt es eine Funtion die Überprüft ob ein Wert in einer Variablen ein int ist?
Eine, meiner bescheidenen Meinung nach, wichtige Alternative wurde noch nicht angesprochen.
Es schränkt ziemlich ein, wenn du prüfst, ob ein Wert ein INT ist. Wenn du den Wert aber nach INT umzuwandeln versuchst, dann kannst du sogar LONG oder STRING übergeben und trotzdem funktioniert das Ganze.
Code: Alles auswählen
def verdopple_ganzzahl(zahl):
zahl = long(zahl)
return zahl * 2
Zumindest kann dann nicht so etwas unerwartetes von der Funktion zurück gegeben werden, wie in diesem Fall:
Code: Alles auswählen
def verdopple_ganzzahl(zahl):
return zahl * 2
print verdopple_ganzzahl("123.33") # --> '123.33123.33'
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.