[Python-de] auf Liste testen

Stefan Behnel behnel_ml at gkec.informatik.tu-darmstadt.de
Don Dez 15 15:07:06 CET 2005


Benjamin Kaminski schrieb:
> Ach ja für strings
> if type(l) == str
> oder
> from types import StringType
> if type(l) == StringType

isinstance() ist eigentlich immer die bessere Wahl, da es Subklassen zulässt.
Ansonsten würde ich bei dem Test oben den Vergleich mit 'is' verwenden.

Manchmal ist auch duck-typing vorzuziehen. Dann kann man einfach mal
nachschauen, wie sich die Typen unterscheiden:

>>> dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
'__delslice__', '__doc__', '__eq__', '__ge__', '__getattribute__',
'__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__',
'__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__',
'__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
'__rmul__', '__setattr__', '__setitem__', '__setslice__', '__str__', 'append',
'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

>>> dir('')
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__',
'__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__',
'__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
'__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center',
'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index',
'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper',
'join', 'ljust', 'lower', 'lstrip', 'replace', 'rfind', 'rindex', 'rjust',
'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase',
'title', 'translate', 'upper', 'zfill']


Bestimmte Methoden und Attribute sind spezifisch für bestimmte 'Meta'-Typen
(wie Sequenzen, etc). Siehe dazu auch
http://docs.python.org/lib/types.html

Stefan