[python] Il est plus efficace d'utiliser if-return-return ou if-else-return?


2 Answers

Du guide de style Chromium's :

Ne pas utiliser d'autre après le retour:

# Bad
if (foo)
  return 1
else
  return 2

# Good
if (foo)
  return 1
return 2

return 1 if foo else 2
Question

Supposons que j'ai une instruction if avec un return . Du point de vue de l'efficacité, devrais-je utiliser

if(A > B):
    return A+1
return A-1

ou

if(A > B):
    return A+1
else:
    return A-1

Dois-je préférer l'un ou l'autre en utilisant un langage compilé (C) ou un langage scripté (Python)?




J'utiliserais toujours:

return A+1 if (A > B) else A-1

Comme il obéit à la fois la bonne convention d'avoir un seul énoncé de retour comme la dernière déclaration dans la fonction (comme déjà mentionné) et le bon paradigme de programmation fonctionnelle d'éviter les résultats intermédiaires de style impératif. Pour les fonctions plus complexes, je reviens à l'utilisation d'une variable de style impérative appelée rval. Je n'utilise jamais plusieurs instructions de retour, préférant rompre la fonction en plusieurs sous-fonctions pour éviter cela si nécessaire. Je ne considère pas du tout la question de l'efficacité, car c'est l'efficacité du codage (c'est-à-dire l'écriture d'un code sans erreur) qui compte pour moi.




En ce qui concerne le style de codage:

La plupart des normes de codage, quel que soit le langage, interdisent les déclarations à déclaration multiple provenant d'une seule et même fonction.

(Bien que personnellement, je dirais qu'il y a plusieurs cas où plusieurs déclarations de retour ont du sens: parseurs de protocole texte / données, fonctions avec gestion étendue des erreurs, etc.)

Le consensus de toutes ces normes de codage de l'industrie est que l'expression devrait être écrite comme suit:

int result;

if(A > B)
{
  result = A+1;
}
else
{
  result = A-1;
}
return result;

En ce qui concerne l'efficacité:

L'exemple ci-dessus et les deux exemples de la question sont tous équivalents en termes d'efficacité. Dans tous ces cas, le code machine doit comparer A> B, puis se connecter au calcul A + 1 ou A-1, puis stocker le résultat dans un registre CPU ou dans la pile.

MODIFIER :

Sources:

  • MISRA-C: 2004 règle 14.7, qui à son tour cite ...:
  • CEI 61508-3. Partie 3, tableau B.9.
  • CEI 61508-7. C.2.9.





Related