Je veux une fonction qui prend normalement un argument de type X où X est soit un scalaire, une liste, ou un dictionnaire, et renvoie une liste de X avec les mêmes valeurs clés, basée sur d'autres informations.
def foo(info, k):
return [bar(item,k) for item in processInfo(info)]
def bar(item, keydata):
# pseudo-code suit.
# Ce que nous voulons faire est renvoyer une sortie de type parallèle à la clé d'entrée k,
# en utilisant les données clés pour rechercher des informations de l'élément d'entrée.
if keydata est un scalaire:
return item[keydata]
elif keydata est une liste:
return [item[k] for k in keydata]
elif keydata est un dictionnaire:
return dict((k,item[v]) for (k,v) in keydata.iteritems())
else:
raise ValueError('bar attend un scalaire, une liste ou un dictionnaire')
Ma question est, comment puis-je dispatcher entre les trois types?
éditer: Une chaîne de caractères doit être interprétée comme un scalaire, pas une liste/itérable. Les tuples doivent être interprétés comme itérables.
éditer 2: Je veux un typage canard, pas un typage strict.