4 votes

retourner plusieurs valeurs en python sans casser le code précédent

J'avais une version 1 d'une fonction comme :

def f(a,b,c):
    #Some processing
    return some_result

Plus tard, je l'ai mis à niveau vers la version 2.

def f(a,b,c):
    #Some processing
    #Some more processing
    return some_result, additional_result

Cette dernière version renvoie un tuple. Par conséquent, tout le code client utilisant la version 1 devient obsolète. Puis-je obtenir additional_result sur demande ?

C'est-à-dire que vous obtenez additional_result seulement quand vous le demandez alors que vous continuez à obtenir some_result comme si rien n'avait changé.

Une astuce à laquelle j'ai pensé :

def f(a,b,c, need_additional = False):
    #Some processing
    #Some more processing
    if not need_addional:
        return some_result
    else:
        return some_result, additional_result

Rien de mieux ? Ou plus générique ?

1voto

jerrymouse Points 3510

Je l'applique enfin comme :

def f(a,b,c, v2 = False):
    #Some processing
    #Some more processing
    if not v2:
        return some_result
    else:
        v2_dict = {}
        v2_dict['additional_result'] = additional_result
        v2_dict['...'] = ...
        return some_result, v2_dict

Avantages :

  • Le code hérité ne se casse pas.
  • Pas de limitation des valeurs de retour dans la future édition.
  • Le code est gérable.

0voto

Marek Points 144

Vous pouvez également renvoyer des valeurs supplémentaires comme références dans le dictionnaire dont la référence a été passée comme argument supplémentaire, par exemple :

def f(a,b,c, additional_result_dict = {}):
    #Some processing
    #Some more processing
    additional_result_dict['additional_result'] = additional_result
    return some_result

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X