Ich muss wissen, ob eine Variable in Python eine Zeichenkette oder ein Diktat ist. Ist an dem folgenden Code etwas falsch?
if type(x) == type(str()):
do_something_with_a_string(x)
elif type(x) == type(dict()):
do_somethting_with_a_dict(x)
else:
raise ValueError
Update : Ich habe die Antwort von avisser akzeptiert (obwohl ich meine Meinung ändern werde, wenn jemand erklärt, warum isinstance
ist vorzuziehen gegenüber type(x) is
).
Aber danke an nakedfanatic, der mich daran erinnert hat, dass es oft sauberer ist, ein dict (als Fallanweisung) als eine if/elif/else-Reihe zu verwenden.
Lassen Sie mich meinen Anwendungsfall näher erläutern. Wenn eine Variable eine Zeichenkette ist, muss ich sie in eine Liste aufnehmen. Wenn es ein Diktat ist, brauche ich eine Liste der eindeutigen Werte. Hier ist, was ich kam mit:
def value_list(x):
cases = {str: lambda t: [t],
dict: lambda t: list(set(t.values()))}
try:
return cases[type(x)](x)
except KeyError:
return None
Si isinstance
bevorzugt wird, wie würden Sie das schreiben value_list()
Funktion?