• [^] # Re: Autres outils

    Posté par . En réponse au journal chaintools, outils unix avec syntaxe pythonique. Évalué à 5.

    de faire un pipeline d'outil en pur python

    Je ne vois pas trop l'intérêt, étant donné qu'ici c'est presque simplement de la composition de fonctions (ici de générateurs).

    De plus, en python la composition est assez « peu naturelle », car tu as du code comme (ce qui se voit sur l'exemple que tu as écrit) :

    ma_fonction_qui_compose (fonction1, fonction2 .....)

    En revanche, un code plus « pythonique » serait d'utiliser chaque appel comme une instruction indépendante :

    a = fonction1
    ... faire des choses 
    b = fonction2 (a)
    ... faire des choses

    Cela permet :

    1. De pouvoir simplement faire autre chose au milieu d'une liste d'appels sans avoir à créer un « outil » spécifique
    2. D'avoir accès à un état global (au moins en lecture) puisque chaque appel peut utiliser les résultats de tous les précédents sans alourdir la syntaxe (alors que si on devait passer l'intégralité des résultats à chaque fonction, ce serait lourd !).

    Alors, bien sûr, il est utile de composer directement : on peut supprimer les structures intermédiaires de données. Mais du coup, essayer de faire une notation infixe serait pas mal si tu veux inciter l'utilisation de ta fonction chain (même si c'est un peu un hack) :

    class Composable:
     def __rshift__ (self, next):
     return compose (next,self)
    a = ma_premiere_fonction ()
    b = cat () >> grep () >> sed ()
    c = zip (a,b)
    ...