• [^] # Re: Mon avis à moi et rien qu'à moi

    Posté par (site web personnel) . En réponse au journal Python comme premier langage de programmation ?. Évalué à 2.

    any demande un iterable (qui possède la méthode __iter__). Logiquement, any arrête d'itérer sur l'itérable lorsque un True est vérifié quelque soit l'itérable. Par contre il y a une différence entre

    if any([i < 0 for i in foo])

    et

    if any(i < 0 for i in foo)

    Dans le premier cas une liste est générée en totalité, réside en mémoire, et any itère sur ses éléments. Dans le second, un générateur est instancié, génère les éléments à la demande d'any. A noté que le second cas est syntaxiquement équivalent à

    if any((i < 0 for i in foo))

    mais les parenthèses sont inutiles, l'interpréteur identifie directement un générateur. C'est beau, simple, claire et ça se lit littéralement... Par contre on pourrait faire

    gen_obj = (i < 0 for i in foo)
    if any(gen_ob): print "Toto"