Supposons qu'il existe des fonctions de transformation utiles, par exemple random_spelling_error
, que nous aimerions appliquer n fois.Python moyen de ré-appliquer une fonction à sa propre sortie n fois?
Ma solution temporaire ressemble à ceci:
def reapply(n, fn, arg):
for i in range(n):
arg = fn(arg)
return arg
reapply(3, random_spelling_error, "This is not a test!")
est-il un moyen intégré ou autrement mieux faire?
Il n'est pas nécessaire de gérer des arguments de longueur variable ou des arguments, mais cela pourrait être le cas. La fonction sera appelée à l'échelle, mais les valeurs de n seront faibles et la taille de l'argument et la valeur de retour seront faibles.
On pourrait appeler cela reduce
mais ce nom était bien sûr pris pour une fonction qui peut faire cela et trop beaucoup plus, et a été retiré en Python 3. Voici Guido's argument:
Donc, dans mon esprit, l'applicabilité de reduce() est à peu près limitée à opérateurs associatifs, et dans tous les autres cas, il est préférable d'écrire explicitement .
Voir les solutions R: https://stackoverflow.com/questions/29237136/relooping-a-function-over-its-own-output –
Je ne pense pas qu'il y ait quelque chose de mal ou de "non-pythonique" à propos de votre boucle. Oui, peut-être que vous pourriez le faire en une ligne au lieu de trois, mais pour quoi faire? Il est immédiatement clair ce qu'il est censé faire, ce qui en fait _very_ pythonic à mon humble avis. –
@tobias_k Je suis d'accord qu'il est lisible (et efficace) tel quel, je me demande simplement s'il y a une convention ou si j'ai dupliqué quelque chose, parce que la tâche semble très ordinaire. –