Bienvenue sur IndexError.

Ici vous pouvez poser des questions sur Python et le Framework Django.

Mais aussi sur les technos front comme React, Angular, Typescript et Javascript en général.

Consultez la FAQ pour améliorer vos chances d'avoir des réponses à vos questions.

Quelqu'un a-t-il déjà vu ou connaît il le nom de ce pattern ?

+6 votes

inspiré par http://www.dabeaz.com/generators/ j'ai abouti à ce code et d'un thread de python-ideas

import fileinput
import sys

def cat(*names):
    def cat(input):
        yield from fileinput.input(*names)
    return cat

def output():
    def _output(input):
        for line in input:
            print(line,end="")
    return _output

def split(separator=None):
    #print("splitting",file=stderr)
    def _split(input):
        yield from (line.split(separator) for line in input)
    return _split

def sort(key=None,reverse=False):
    def _sort(input):
        yield from sorted(input,key=key,reverse=reverse)
    return _sort

def join(separator=""):
    def _join(input):
        yield from (separator.join(line) for line in input)
    return _join


def chain_generators(*generators):
    input = None
    for generator in generators:
        input = generator(input)
    return generator

chain_generators(
                 cat(sys.argv[1:]),
                 split(","),
                 sort(key=lambda k:int(k[1]),reverse=True),
                 join("\t"),
                 output())

Ça ressemble encore plus à un pipe unix
Je trouve que rajouter des paramètres aux c'est une amélioration aux idée originale
Je me demande si quelqu'un a déjà vu ou connaît le nom de ce pattern?

exemple d'utilisation de ce programme jouet

transformer:

xcombelle@xcombelle-home ~/d/sarge> cat input.txt
line1,3
line2,4
line3,1

en

xcombelle@xcombelle-home ~/d/sarge> python3.4 project.py input.txt 
line2   4
line1   3
line3   1
demandé 22-Fev-2015 par Xavier Combelle (164 points)
edité 23-Fev-2015 par Xavier Combelle

dsl, je ne connais pas...
par contre, tu pourrais donner un exemple d'input?
ça semble intéressant comme pattern, à suivre :)

Aux downvotes, merci d'expliquer pourquoi vous downvotez , histoire que chacun comprenne en quoi le sujet quel qu'il soit, le mérite

Moi je trouvais la question intéressante pourtant ! Les down-votants (les frondeurs quoi...) n'ont pas l'esprit Charlie, ni l'esprit 49-3 c'est bien connu ;)

2 Réponses

+5 votes
 
Meilleure réponse

C'est un pattern "factory", appliqué aux générateurs.

répondu 30-Mar-2015 par Sam (4,984 points)
sélectionné 7-Avr-2015 par Xavier Combelle

meilleure réponse jusque là

+3 votes

Selon cet article (que je recommande, si tu n'est pas mortellement allergique à l'anglais), ca ressemble a une closure:

This technique of using the values of outside parameters within a dynamic function is called closures.

Et l'article wikipedia en francais qui va bien

répondu 14-Mar-2015 par iCart (130 points)

En effet ça utilise des closures, mais mon idée c'est plutôt d'avoir des générateurs paramétrés, chose que je n'ai vu nulle part auparavant.

...