Comment est-ce à lambda/rendement/générateur de compréhension du travail?

Je regardais à travers mon code aujourd'hui et trouvé ceci:

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')
                )
            )
        )

Il semble prendre une dict de paramètres et de les transformer en une liste de paramètres à un shell de commande. Il semble que c'est à l'aide de rendement à l'intérieur d'un générateur de compréhension, j'ai pensé que ce serait impossible...?

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

Comment ça fonctionne?

  • Dang. Parler de code illisible.
  • le plus drôle, c'est la list(reversed(list( partie, pour obtenir le -o commutateurs de droit, bien que
  • Aussi tous les lambdas pourraient avoir été juste ((lambda _: '-o')((yield x)) for x in kvs)
  • ... et aussi l'instruction de retour pourrait être simplement exprimé en [v for o in kvs for v in ["-o", o]].
  • Cela me rappelle de duffs appareil. À partir de ce jour ce sera à jamais connu comme les Chiens de l'appareil lol.
  • Ressemble à quelqu'un a obtenu Maslow marteau et gardé frapper jusqu'à ce que ce sort.
  • Lol l'homme pour ce projet, vous êtes mieux avec Lisp, je suppose aha ..

InformationsquelleAutor Dog | 2013-04-11