Je regardais un article sur le site Web de Peter Norvig, où il essaie de répondre à la question suivante (ce n'est pas ma question, btw) "Puis-je faire l'équivalent de (test?) en Python? "python fonction paramètre modèle d'évaluation
est ici l'une des options énumérées par lui,
def if_(test, result, alternative=None):
"If test is true, 'do' result, else alternative. 'Do' means call if callable."
if test:
if callable(result): result = result()
return result
else:
if callable(alternative): alternative = alternative()
return alternative
Et voici un exemple d'utilisation.
>>> fact = lambda n: if_(n <= 1, 1, lambda: n * fact(n-1))
>>> fact(6)
720
Je comprends comment cela fonctionne (je pense), mais je viens de jouer avec le code, et a décidé de voir ce qui se passe quand je change le troisième argument dans la définition du « fait » ci-dessus pour n * fait (n-1), c'est-à-dire, le change en une expression non-appelable. En l'exécutant, l'interprète entre dans une boucle sans fin. J'ai une assez bonne idée de la raison pour laquelle cela se produit, c'est-à-dire que la fonction if_ renvoie la même expression que celle qu'elle reçoit. Mais quel est le type de cette expression? Qu'est-ce qui se passe exactement ici? Je ne cherche pas d'explication détaillée, mais juste quelques indications sur le modèle d'évaluation de python qui pourraient m'aider à comprendre.
Merci!
Probablement sans rapport, mais vous pouvez simplement utiliser 'result if test else alternative'. – kennytm