Bienvenue sur IndexError.

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

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 (5,000 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.

...