0
votes

Lambda multiples fonctions implémentées dans Python comme la commande de pipeline Linux

Je suis en train de mettre en œuvre cette exigence:

Dans le cadre d'un pipeline de traitement de données, remplissez la mise en œuvre de la méthode du pipeline: P>

  • La méthode doit accepter un nombre variable de fonctions, et devrait renvoyer une nouvelle fonction qui accepte un paramètre arg em>. p> li>

  • La fonction renvoyée doit appeler la première fonction dans le pipeline avec le paramètre arg em> et appelez la deuxième fonction avec le résultat de la première fonction. P> li>

  • La fonction renvoyée doit continuer à appeler chaque fonction dans le pipeline dans l'ordre, après le même modèle et renvoyer la valeur de la dernière fonction. P> li> ul>

    Par exemple, Pipeline (Lambda X: X * 3, Lambda X: X + 1, Lambda X: X / 2) Code> Puis appelant la fonction renvoyée avec 3 devrait renvoyer 5,0. P > blockQuote>

    mon code h1> xxx pré>

    question h1>

    Aucune code> est retourné. Pourquoi? P>

    before returning, helper value is:  5.0  
    final result:  None
    


1 commentaires

J'ai fait la mise en œuvre du code Python 3 et j'ai atteint le résultat final comme 5.0, mais avec l'aide de retour, elle n'en retournera qu'aucun


4 Réponses :


4
votes

Le problème est que vous n'exécutez pas un retour juste après votre Imprimer . Vous do ont un retour dans la branche el / code> juste avant, mais pas dans le bloc si bloc. De plus, la Helper Vous avez également ci-dessous n'appartient pas au bloc de fonction def , de sorte que vous avez besoin d'un autre de retour . J'aurais en fait omettre le bloc sinon , et tout simplement faire le retour, comme ceci: xxx

Il n'est pas vraiment clair pourquoi vous avez une liste res , car il n'y a qu'une seule valeur à passer d'une fonction à la suivante. Vous pouvez simplement utiliser arg à cet effet. En outre, vous utilisez assistant dans deux sens différents (fonction et valeur) qui est assez déroutant. Le code peut être simplifié à ceci: xxx


1 commentaires

Grande Trincot. J'ai utilisé votre code et j'ai parfaitement travaillé. Très appréciée



1
votes

Vous faites: impression ('avant le retour, la valeur de l'assistance est:', aide) ... et ne renvoie rien à partir de assistant < / em>, donc cela renvoie implicitement aucun .


0 commentaires

3
votes

Ne pas inventer ce qui est déjà disponible dans Python

from functools import reduce

pipeline = [lambda x: x * 3, lambda x: x + 1, lambda x: x / 2]

val = reduce(lambda x, f: f(x), pipeline, 3)

print(val)  # 5.0


3 commentaires

Ne devrait-il pas être à partir de FuncTools importer réduire ?


Le code d'origine provenait d'une question de codage d'entretien - niveau du niveau de python et je suis juste au niveau débutant, je suis au courant de réduire l'API. Je n'essaie pas de réinventer!


lol considérez que ces fabricants d'essais ont échoué le niveau facile pour Python



0
votes
def pipeline(*args):
    def helper(num):
        for i in args:
            total=i(num)
            num=total
        return total
    return helper

fun = pipeline(lambda x: x * 3, lambda x: x + 1, lambda x: x / 2)
print(fun(3)) #should print 5.0

0 commentaires