Typ festellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

Was ist da los?

Code: Alles auswählen

def f(L):
    print(type(L))
    if type(L) == 'list':
        print('L')
    else:
        print('else',type(L))

f([1,2])
Ausgabe:
<class 'list'>
else <class 'list'>
Kyrus86
User
Beiträge: 5
Registriert: Samstag 21. Oktober 2023, 13:04

Hallo hubgra,
die Funktion "type" liefert den Typ des Objekts zurück, nicht einen String mit der Typbezeichnung.

Code: Alles auswählen

...
if type(L) is list:
...
Benutzeravatar
grubenfox
User
Beiträge: 432
Registriert: Freitag 2. Dezember 2022, 15:49

Was soll da los sein?

Code: Alles auswählen

<class 'list'>
ist ein anderer String als der String

Code: Alles auswählen

'list'
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

ok, aber wie kann ich feststellen, welchen Typ ein Parameter hat?
Kyrus86
User
Beiträge: 5
Registriert: Samstag 21. Oktober 2023, 13:04

Hallo hubgra,

statt mit einem String, vergleicht man direkt mit dem Typ selbst.

Also statt

Code: Alles auswählen

if type(L) == 'list':
macht man

Code: Alles auswählen

if type(L) is list:
hubgra
User
Beiträge: 53
Registriert: Donnerstag 20. Juli 2023, 17:20

Danke, wo lernt man das ? Das Schlüsselwort "is" habe ich noch nie gelesen.
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Ich würde das gar nicht prüfen.
Warum ist es wichtig, ob da eine Liste kommt?
Warum funktioniert an der Stelle dann kein Tuple oder ein anderes iterierbares Objekt?
nezzcarth
User
Beiträge: 1637
Registriert: Samstag 16. April 2011, 12:47

hubgra hat geschrieben: Sonntag 21. Januar 2024, 17:22 Danke, wo lernt man das ? Das Schlüsselwort "is" habe ich noch nie gelesen.
Also im offiziellen Python-Tutorial, das finde ich jeder mal durchgearbeitet haben sollte, wird es zumindest kurz gestreift:
https://docs.python.org/3/tutorial/cont ... -functions

Etwas mehr Details zum Gesamtkontext gibt es in der ebenfalls sehr zu empfehlenden Sprachreferenz (6.10.3):
https://docs.python.org/3/reference/exp ... omparisons

Zur Typ-Prüfung selbst hat sparrow ja schon was gesagt.
Benutzeravatar
__blackjack__
User
Beiträge: 13118
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Und wenn Typprüfung, dann nicht mit `type()` sondern mit `isinstance()` damit man wenigstens auch abgeleitete Typen nicht ausschliesst. Was ist denn hier der Anwendungsfall?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Benutzeravatar
noisefloor
User
Beiträge: 3857
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

und statt gegen `type()` zu vergleichen prüft man einfacher mit isinstance, das liefert direkt `True` oder `False` zurück.

Gruß, noisefloor
Antworten