Продолжение строки для понимания списка или генераторных выражений в python
Как вы должны разбить очень длинный список понимания?
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
Я также где-то видел, что люди, которые не любят использовать '', чтобы разбить линии, но так и не понял почему. В чем причина этого?
3 ответа:
[x for x in (1,2,3) ]
работает отлично, так что вы можете в значительной степени делать, как вам нравится. Я лично предпочел бы
[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
причина
\
не очень ценится то, что он появляется в конец линии, где она либо не выделяется, либо нуждается в дополнительном дополнении, которое должно быть исправлено при изменении длины линии:x = very_long_term \ + even_longer_term_than_the_previous \ + a_third_term
в таких случаях, используйте скобки:
x = (very_long_term + even_longer_term_than_the_previous + a_third_term)
Я не против:
variable = [something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]
не нужно
\
в этом случае. В общем, я думаю, что люди избегают\
потому что это немного некрасиво, но также может дать проблемы, если это не самая последняя вещь на линии (убедитесь, что за ней не следует пробел). Я думаю, что это гораздо лучше, чтобы использовать его, чем нет, хотя, чтобы сохранить ваши длины линии вниз.С
\
Не обязательно в приведенном выше случае или для выражений в скобках, я на самом деле нахожу это довольно редко, что мне даже нужно его использовать.
вы также можете использовать несколько вмятин в тех случаях, когда вы имеете дело со списком из нескольких структур данных.
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 ] ]
обратите внимание, как он также фильтруется в другой список с помощью оператора if. Также полезно удалить оператор if в свою собственную строку.