De plus en plus de fonctionnalités de Python se déplacent pour être "paresseux exécutable", comme les expressions génératrices et d'autres types d'itérateurs. Parfois, cependant, je me vois vouloir rouler une boucle "pour" une ligne, juste pour effectuer une action.Quelle est la manière la plus pythonique d'avoir une expression de générateur exécutée?
Quelle serait la chose la plus pythonique pour que la boucle soit réellement exécutée?
Par exemple:
a = open("numbers.txt", "w")
(a.write ("%d " % i) for i in xrange(100))
a.close()
pas de code Actuall, mais vous voyez ce que je veux dire. Si j'utilise un générateur de liste, à la place, j'ai l'effet secondaire de créer une liste N-longueur remplie de "Aucun".
Actuellement, ce que je fais est d'utiliser l'expression comme argument dans un appel à "any" ou à "all". Mais je voudrais trouver un moyen qui ne dépende pas du résultat de l'expression effectuée dans la boucle - "any" et "all" peuvent s'arrêter en fonction de l'expression évaluée.
Pour être clair, ce sont des moyens de le faire que je connais déjà au sujet, et chacun a ses inconvénients:
[a.write ("%d " % i) for i in xrange(100))]
any((a.write ("%d " % i) for i in xrange(100)))
for item in (a.write ("%d " % i) for i in xrange(100)): pass
"Liste de longueur N remplie de moniales." –
Juste pour clarifier: j'utilise rarement des choses comme ça dans le code de production - et étant donné les réactions ici, je vais probablement arrêter complètement, mais j'aime m'amuser à écrire des choses en ligne (même si elles ne sont pas pythoniques par nature). Hier encore, je me suis donné beaucoup de mal pour obtenir une doublure pour la méthode de la liste des "chunck" de ruby 1.9.2 (la version d'une ligne aspirée - mais une ligne supplémentaire déclarant Le dictionnaire devant un "générateur exécuté" donne à Python quelque chose de plus agréable que le "chunck" chose) – jsbueno
@Nas: Arrêtez d'accuser au hasard les gens de choses qu'ils n'ont pas faites –