1
votes

Comment empaqueter une séquence de fonctions qui agissent sur un paramètre dans l'ordre en Python

Imaginez qu'il existe trois fonctions, toutes acceptant et retournant le même type d'arguments.

" carte ".

Vous savez dans Mathematica, nous pouvons écrire ceci comme fun3 @ fun2 @ fun1 @ args .

Maintenant, la question est de savoir si nous pouvons intégrer fun3 @ fun2 @ fun1 comme un autre plaisir sans modifier leur définition, donc fun (args) peut remplacer fun3 (fun2 (fun1 (args)) , cela semble plus élégant et concis.


0 commentaires

3 Réponses :


0
votes

Je pense que vous pouvez utiliser Function Recursion en python pour ce faire.

def function(args, times):
    print(f"{times} Times - {args}")
    if times > 0 : 
        function(args,times - 1)

function("test", 2)

Remarque: j'ajoute simplement un argument times pour ne pas générer de boucle infinie. p >


1 commentaires

ça me donne que ça va loin.



0
votes

Je ne suis pas certain de comprendre votre question, mais parlez-vous de la composition de fonctions dans ce sens?


3 commentaires

cela fonctionne aussi, mais il ne sépare pas la nouvelle génération de fonction et son appel de paramètre, 'compose' renvoie le résultat final, pas la nouvelle fonction。


@eason OK, maintenant je pense que je comprends votre objectif. Voir la réponse modifiée.


absolument, l'utilisation de fermetures, ça m'a frappé, mais je suis un python d'introduction.



1
votes
steps = [power_ten, plus_one, double_it]

reduce(lambda a, f: f(a), steps, 3)
> 3486902500

1 commentaires

vraiment cool, c'est mon idéal, surtout que la combinaison de lambda et de réduire me convient, c'est une puce de la mathématique "f @@ expr ou Apply [f, expr]" comme f2 @ f1 @ t donne f2 [f1 [ t]], sans définir de fonction. Merci