• # Générateurs python

    Posté par (site web personnel) . En réponse au journal Python, Lies and Video Files. Évalué à 9.

    Au lieu de

    transform_ops = [
     AAFRemoveVideo(..., self.aaf_file, ...),
     AAFInsertVideo(..., self.aaf_file, ...),
     AAFRelinkAudio(..., self.aaf_file, ...)
    ]
    if not all([op.run() for op in transform_ops]):
     logging.error("One or more transformations didn't go all the way.")

    tu devrais utiliser la syntaxe

    transform_ops = [
     AAFRemoveVideo(..., self.aaf_file, ...),
     AAFInsertVideo(..., self.aaf_file, ...),
     AAFRelinkAudio(..., self.aaf_file, ...)
    ]
    if not all(op.run() for op in transform_ops):
     logging.error("One or more transformations didn't go all the way.")

    Ce qui change, c'est qu'au lieu de générer une liste contenant le résultat de toute les ops et qui sera ensuite parcourue par la fonction all(), la fonction all() va pouvoir directement évaluer le résultat de tes opérations. Ce qui fait que tu te passes de la création d'une liste temporaire, et tu stops le traitement dès la première erreur rencontré. Après, si ta liste est petite et que tes traitement sont rapides, limite osef. Mais comme ça marche aussi bien pour les petits cas que les grands cas, autant prendre l'habitude de l'utiliser partout ;)

    # Un exemple plus succinct
    # Ce code va générer un tableau de 1M éléments
    all([i != 1 for i in range(1000000)]
    # Ce code va générer seulement 2 éléments
    all(i != 1 for i in range(1000000))