Continuación de línea para listas de comprensión o expresiones generadoras en python

¿Cómo se supone que debes romper una lista muy larga de comprensión?

[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long] 

También he visto en algún lugar que a las personas que no les gusta usar ‘\’ para romper líneas, pero nunca entendieron por qué. Cuál es la razón detrás de esto?

 [x for x in (1,2,3) ] 

Funciona bien, así que puedes hacer lo que quieras. Yo personalmente prefiero

  [something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long] 

La razón por la que \ no se aprecia mucho es que aparece al final de una línea, donde o bien no se destaca o necesita un relleno adicional, que se debe corregir cuando cambian las longitudes de las líneas:

 x = very_long_term \ + even_longer_term_than_the_previous \ + a_third_term 

En tales casos, utilice parens:

 x = (very_long_term + even_longer_term_than_the_previous + a_third_term) 

No me opongo a:

 variable = [something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long] 

No necesitas \ en este caso. En general, creo que las personas evitan \ porque es un poco feo, pero también pueden dar problemas si no es lo último en la línea (asegúrese de que no haya espacios en blanco). Sin embargo, creo que es mucho mejor usarlo que no para mantener la longitud de la línea baja.

Dado que \ no es necesario en el caso anterior, o para expresiones entre paréntesis, en realidad me parece bastante raro que incluso necesite usarlo.

También puede hacer uso de múltiples sangrías en los casos en que esté tratando con una lista de varias estructuras de datos.

 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 ] ] 

Observe cómo también se filtra en otra lista utilizando una instrucción if. También es útil colocar la instrucción if en su propia línea.