2010-12-02 5 views

Répondre

3

itertools.chain.from_iterable(s.messages for s in self.services)

+0

Ceci est mon préféré. Flat est mieux que niché, en particulier dans one-liners. – twneale

+0

Oui c'est parfait - je voulais utiliser itertools.chain() car c'était parce que je faisais plusieurs rendements, donc j'ai juste eu plus pour l'import. – Tony

+0

@Tony: Est-ce que vous réalisez que ce sera parfaitement incompréhensible pour les gens qui vous demandent de maintenir votre code? Savez-vous que les gens vous détesteront d'avoir mis cela dans le code qu'ils doivent maintenir? –

7

(m for s in self.services for m in s.messages)

... comme contre-intuitif que cela puisse paraître.

+0

Ceci est basé sur un exemple trouvé dans PEP 289 qui spécifie (propose?) Des expressions de générateur en premier lieu. Le PEP n'explique pas vraiment très bien comment cela fonctionne dans les cas difficiles comme celui-ci; Peut-être que cela dépend de la familiarité avec ce comportement de la compréhension de la liste? –

+0

Merci, ça marche, mais j'aime la méthode itertools car il est beaucoup plus facile d'écrire et de revenir plus tard pour comprendre ce qui se passe rapidement. – Tony

+0

J'aime aussi la méthode itertools. ;) –

Questions connexes