deffunction(input):""" Take an input that may be a iterable or not. """iterable=inputtry:(xforxininput)exceptTypeError:iterable=(input,)else:""" it is an iterable, maybe it is a string """ifisinstance(input,basestring):""" basestring is the only particular case as it is also an iterable"""iterable=(input,)do(iterable)
Et maintenant ?
On peut faire la conso mémoire, le coût du isinstance et de l'exception aussi si tu veux. Surcout de la version avec polymorphisme adhoc: 0%.
Tu fais comment avec du polymorphisme à 0% de surcout ?
[^] # Re: Le titre est trop long
Posté par GaMa (site web personnel) . En réponse au journal Typage statique versus typage dynamique. Évalué à 2.
Ok,
Et maintenant ?
Pour le cout de l'exception, ça dépend surtout de la proba que tu passes un itérable ou pas. Si c'est principalement des itérables, ton exception occasionnelle ne coute pas bien chère face à un if que tu fais tout le temps (http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Initializing_Dictionary_Elements)
Quant au isinstance, effectivement, j'ai pas d'autre solution qui limiter le test au cas où on sait que l'on a déjà un itérable.
Matthieu Gautier|irc:starmad