J'ai besoin de savoir si une variable en Python est une chaîne de caractères ou un dict. Il n'y a rien de mal avec le code suivant?
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
Mise à jour: j'ai accepté avisser de la réponse (même si je vais changer d'avis si quelqu'un explique pourquoi isinstance est préférée à l'expression "de type(x) est").
Mais grâce à nakedfanatic pour me rappeler que c'est souvent plus propre d'utiliser une dict (comme une "instruction de cas) que d'un if/elif/else de la série.
Permettez-moi de développer mon cas d'utilisation. Si une variable est une chaîne, j'ai besoin de le mettre dans une liste. Si c'est un dict, j'ai besoin d'une liste de valeurs uniques. Voici ce que j'ai trouvé:
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 est préférée, comment voulez-vous écrire ce liste_valeurs() la fonction?