[Python-de] Re: auf Liste testen

"Martin v. Löwis" martin at v.loewis.de
Sam Dez 17 20:29:55 CET 2005


Harald Armin Massa wrote:
> Warum muß man überhaupt wissen, ob etwas eine Liste ist?

Es kommt oft vor, dass man zwischen Liste (von Strings)
und String unterscheiden möchte; i.d.R. gilt ein Stringargument
dann gleichwertig mit "Liste bestehend nur aus dem String".
Etwa in der Art

def process(thing):
    for text in thing:
        output(text)

Wenn jetzt thing ein String ist, "funktioniert" der Algorithmus
immernoch - ruft aber output() für jedes einzelne Zeichen aus.

In diesem Fall sollte man "ist string" testen, und nicht
"ist liste": auch wenn es Tupel oder sonst eine Folge ist,
will man die Elemente ausgeben.

M.E. richtig lautet die Funktion

def process(thing):
    if isinstance(thing, basestring):
         output(text)
         return
    for text in thing:
         output(text)

D.h. der Test sollte nicht lauten

    if type(thing) == str

weil das keine Unicode-Strings erkennt;

    if type(thing) in (str, unicode):

hat den gleichen Effekt, ist aber vielleicht etwas
langsamer.

Ciao,
Martin