Kontynuacja linii dla kompilacji list lub wyrażeń generatora w Pythonie

Jak masz zerwać bardzo długą listę zrozumienia?

[something_that_is_pretty_long for something_that_is_pretty_long in somethings_that_are_pretty_long]

Widziałem też gdzieś, że ludzie, którzy nie lubią używać '\' do rozbijania linii, ale nigdy nie rozumiałem dlaczego. Jaki jest tego powód?

Author: Matt Fenwick, 2011-04-27

3 answers

[x
 for
 x
 in
 (1,2,3)
]
Działa dobrze, więc możesz robić, co chcesz. Ja osobiście wolę
 [something_that_is_pretty_long
  for something_that_is_pretty_long
  in somethings_that_are_pretty_long]

Powodem, dla którego \ nie jest bardzo doceniany, jest to, że pojawia się na końcu linii, gdzie albo się nie wyróżnia, albo wymaga dodatkowej wyściółki, która musi być ustalona przy zmianie długości linii:

x = very_long_term                     \
  + even_longer_term_than_the_previous \
  + a_third_term

W takich przypadkach użyj parens:

x = (very_long_term
     + even_longer_term_than_the_previous
     + a_third_term)
 118
Author: Fred Foo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 14:48:10

Nie jestem przeciwny:

variable = [something_that_is_pretty_long
            for something_that_is_pretty_long
            in somethings_that_are_pretty_long]

Nie potrzebujesz \ w tym przypadku. Ogólnie rzecz biorąc, myślę, że ludzie unikają \, ponieważ jest nieco brzydki, ale również może powodować problemy, jeśli nie jest to ostatnia rzecz na linii(upewnij się, że żadne białe znaki nie podążają za nią). Myślę, że o wiele lepiej jest go użyć, niż nie, aby utrzymać długość linii w dół.

Ponieważ \ nie jest konieczne w powyższym przypadku, lub dla wyrażeń w nawiasach, uważam, że jest to dość rzadkie, że nawet muszę używać to.

 18
Author: Dan Breen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-27 18:58:15

Możesz również korzystać z wielu wcięć w przypadkach, gdy masz do czynienia z listą kilku struktur danych.

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

Zauważ, jak filtruje również na innej liście używając instrukcji if. Przydatne jest również upuszczenie instrukcji if do własnej linii.

 16
Author: MrOodles,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-30 20:06:59