Sur Codewars.com J'ai rencontré la tâche suivante :
Créer une fonction
add
qui additionne les numéros lorsqu'ils sont appelés successivement. Ainsi,add(1)
devrait retourner1
,add(1)(2)
devrait retourner1+2
, ...
Bien que je sois familier avec les bases de Python, je n'ai jamais rencontré une fonction capable d'être appelée dans une telle succession, c'est-à-dire une fonction f(x)
qui peut être appelé comme f(x)(y)(z)...
. Jusqu'à présent, je ne sais même pas comment interpréter cette notation.
En tant que mathématicien, je soupçonnerais que f(x)(y)
est une fonction qui attribue à chaque x
une fonction g_{x}
et renvoie ensuite g_{x}(y)
et de même pour f(x)(y)(z)
.
Si cette interprétation est correcte, Python me permettrait de créer dynamiquement des fonctions, ce qui me semble très intéressant. J'ai cherché sur le web pendant une heure, mais je n'ai pas réussi à trouver une piste dans la bonne direction. Cependant, comme je ne sais pas comment s'appelle ce concept de programmation, cela n'est peut-être pas trop surprenant.
Comment appelez-vous ce concept et où puis-je en apprendre davantage à son sujet ?
8 votes
On dirait que vous cherchez des fonctions de curry.
2 votes
Conseil : Une fonction imbriquée est créée dynamiquement, a accès aux paramètres locaux de sa fonction parentale et peut être retournée sous forme d'objet (appelable).
0 votes
@JonathonReinhart C'est comme ça que je voyais le problème. Mais je ne voyais pas vraiment comment le mettre en œuvre.
3 votes
En passant : Python va définitivement vous permettent de créer des fonctions de manière dynamique. Si vous êtes intéressé, voici quelques concepts connexes sur lesquels vous pouvez vous documenter : WP : Fonctions de première classe | Comment créer une fonction d'ordre supérieur en Python ? |
functools.partial()
| WP : Fermetures0 votes
@LukasGraf Je vais y jeter un coup d'oeil. Je vous remercie !
0 votes
Assez proche : stackoverflow.com/q/36864755/846892 ?
0 votes
@AshwiniChaudhary Oui, c'est clairement une duplication de cette question - désolé. Comme je n'avais aucune idée de la façon d'appeler une telle construction, je ne pouvais pas rechercher de façon réaliste les doublons.