2017-08-31 7 views
0

Je sais que pour la création de listes, vous pouvez raccourcir quelques lignes à quelque chose comme (en python):Raccourcissement boucle pour envoyer des commandes à travers le tuyau - python

a = [k*2 for k in range(10)] 

Pouvez-vous faire pour l'envoi de données par un tuyau. (en utilisant un module multi-traitement dans ce cas). par exemple:

k = 'hello' 
[channel.send(k) for channel in channels] 

au lieu de:

k = 'hello' 
for channel in channels: 
    channel.send(k) 

Toute suggestion serait génial! Merci d'avance.

EDIT: A été répondu. Liste les mauvaises idées. Il suffit de garder propre à une ligne:

k = 'hello' 
for channel in channels: channel.send(k) 
+0

Vous pouvez mais vous ne devriez pas. https://twitter.com/raymondh/status/902658204345049088 –

+2

Dans ce cas non, vous ne devriez pas utiliser une compréhension de liste. Ils ne doivent être utilisés que lorsque vous essayez de créer une liste de valeurs. Si vous devez simplement parcourir une itération, utilisez une boucle for normale. –

+1

En outre, vos deux exemples ont la même longueur * exacte; la compréhension de la liste remplace le ':' et la nouvelle ligne par un '[' et ']'. En fait, vous pouvez écrire la boucle 'for' sur une ligne, auquel cas la compréhension de la liste est * plus longue *, en plus d'être moins efficace. – chepner

Répondre

2

No. Liste compréhensions sont pour créer des listes. Si vous ne voulez pas la liste, n'utilisez pas une liste de compréhension. Il n'y a rien de mal à utiliser une boucle for quand c'est la bonne chose à utiliser.

+0

Je comprends ce que vous voulez dire. Au lieu de cela, gardez-le comme une boucle for, peut-être avec seulement une ligne. Merci – Rob123

+1

Je ne voudrais même pas le mettre sur une ligne. Le saut de ligne fournit une distinction claire et immédiate entre ce qui est itéré et ce qui est fait avec chacun des objets itérés. Sauvegarder une ligne de code n'a aucun sens. – chepner