Comment êtes-vous censé briser une très longue liste de compréhension?
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
J'ai également vu quelque part que les gens qui n'aiment pas utiliser '\' pour rompre les lignes, mais n'ont jamais compris pourquoi. Quelle est la raison derrière cela?
[x
for
x
in
(1,2,3)
]
fonctionne bien, donc vous pouvez faire à peu près ce que vous voulez. Je préfère personnellement
[something_that_is_pretty_long
for something_that_is_pretty_long
in somethings_that_are_pretty_long]
La raison pour laquelle \
n'est pas très apprécié car il apparaît à la fin d'une ligne, où il ne se démarque pas ou a besoin d'un remplissage supplémentaire, qui doit être corrigé lorsque la longueur des lignes change:
x = very_long_term \
+ even_longer_term_than_the_previous \
+ a_third_term
Dans de tels cas, utilisez des parens:
x = (very_long_term
+ even_longer_term_than_the_previous
+ a_third_term)
Je ne m'oppose pas à:
variable = [something_that_is_pretty_long
for something_that_is_pretty_long
in somethings_that_are_pretty_long]
Vous n'avez pas besoin de \
dans ce cas. En général, je pense que les gens évitent \
parce que c'est un peu moche, mais peut aussi poser des problèmes si ce n'est pas la dernière chose sur la ligne (assurez-vous qu'aucun espace ne le suit). Je pense que c'est beaucoup mieux de l'utiliser que non, cependant, afin de réduire la longueur de vos lignes.
Puisque \
n'est pas nécessaire dans le cas ci-dessus, ou pour les expressions entre parenthèses, je trouve en fait assez rare que je doive même l'utiliser.
Vous pouvez également utiliser plusieurs retraits dans les cas où vous avez affaire à une liste de plusieurs structures de données.
new_list = [
{
'attribute 1': a_very_long_item.attribute1,
'attribute 2': a_very_long_item.attribute2,
'list_attribute': [
{
'dict_key_1': attribute_item.attribute2,
'dict_key_2': attribute_item.attribute2
}
for attribute_item
in a_very_long_item.list_of_items
]
}
for a_very_long_item
in a_very_long_list
if a_very_long_item not in [some_other_long_item
for some_other_long_item
in some_other_long_list
]
]
Remarquez comment il filtre également sur une autre liste à l'aide d'une instruction if. La suppression de l'instruction if sur sa propre ligne est également utile.