Wie funktioniert dieses Lambda / Ertrag / Generator-Verständnis?

Ich war auf der Suche durch meine codebase heute und fand diese:

def optionsToArgs(options, separator='='):
    kvs = [
        (
            "%(option)s%(separator)s%(value)s" %  
            {'option' : str(k), 'separator' : separator, 'value' : str(v)}
        ) for k, v in options.items()
    ]
    return list(
        reversed(
            list(
                    (lambda l, t: 
                        (lambda f: 
                            (f((yield x)) for x in l)
                        )(lambda _: t)
                    )(kvs, '-o')
                )
            )
        )

Es scheint eine dict-Parameter, und schalten Sie Sie in eine Liste von Parametern für ein shell-Befehl. Wie es aussieht ist es mit der Ausbeute im inneren eine generator-comprehension, ich dachte, das wäre unmöglich...?

>>> optionsToArgs({"x":1,"y":2,"z":3})
['-o', 'z=3', '-o', 'x=1', '-o', 'y=2']

Wie funktioniert es?

Kommentar zu dem Problem
Dang. Sprechen Sie über die nicht lesbare code. Kommentarautor: BenDundee
der lustigste Teil ist der - Liste(reversed(list( - Teil zu Holen Sie sich die -o Schalter rechts, obwohl Kommentarautor: ch3ka
Auch alle lambdas haben könnte, wurden nur ((lambda _: '-o')((Ertrag x)) für x kvs) Kommentarautor: Pavel Anossov
... und auch die return-Anweisung konnte nur werden, ausgedrückt als [v, für o-kvs-v in ["-o", o]]. Kommentarautor: l4mpi
Das erinnert mich an duffs device. Von diesem Tag an wird für immer bekannt sein als Hunde Gerät, lol. Kommentarautor: Eric des Courtis

InformationsquelleAutor der Frage Dog | 2013-04-11

Schreibe einen Kommentar