Czy w Pythonie można podzielić długą linię na wiele linii? [duplikat]

to pytanie ma już odpowiedzi tutaj : Jak zrobić podział linii (kontynuację linii) w Pythonie? (10 odpowiedzi) Zamknięty 2 lata temu.

Podobnie jak C, możesz podzielić długą linię na wiele krótkich linii. Ale w Pythonie , jeśli to zrobię, pojawi się błąd wcięcia... Czy to możliwe?

Author: Peter Mortensen, 2010-11-13

7 answers

From Pep 8-Style Guide for Python Code :

Preferowanym sposobem owijania długich linii jest użycie domyślnej linii Pythona kontynuacja wewnątrz nawiasów, nawiasów i szelek. Jeśli to konieczne, możesz może dodać dodatkową parę nawiasów wokół wyrażenia, ale czasami używanie ukośnika wstecznego wygląda lepiej. Upewnij się, że wcięcie kontynuowanego wiersza odpowiednio.

Przykład implicit Line continuation:

a = some_function(
    '1' + '2' + '3' - '4')

W temacie przerwania linii wokół operatora binarnego mówi się: -

Przez dziesięciolecia zalecanym stylem było zerwanie po operatorach binarnych. Ale może to zaszkodzić czytelności na dwa sposoby: operatorzy mają tendencję do rozproszenia się po różnych kolumnach na ekranie, a każdy operator jest odsunięty od swojego operandu i na poprzedni wiersz.

W kodzie Pythona dozwolone jest łamanie przed lub po operatorze binarnym, o ile konwencja jest spójna lokalnie. Dla nowego kodu Knutha sugerowany jest styl (podział linii przed operatorem).

Przykład wyraźnej kontynuacji linii:

a = '1'   \
    + '2' \
    + '3' \
    - '4'
 689
Author: Darin Dimitrov,
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
2016-11-21 12:40:53

Jest na to więcej niż jeden sposób.

1). Długa wypowiedź:

>>> def print_something():
         print 'This is a really long line,', \
               'but we can make it across multiple lines.'

2). Użycie nawiasu:

>>> def print_something():
        print ('Wow, this also works?',
               'I never knew!')

3). Użycie \ jeszcze raz:

>>> x = 10
>>> if x == 10 or x > 0 or \
       x < 100:
       print 'True'

Cytowanie PEP8 :

Preferowany sposób owijania długich lines jest za pomocą implikacji Pythona kontynuacja linii wewnątrz nawiasów, nawiasów i szelek. W razie potrzeby, możesz dodać dodatkową parę nawiasów wokół wyrażenia, ale czasami używanie ukośnika wstecznego wygląda lepiej. Upewnij się, że wcięcie ciągłej linii odpowiednio. Preferowane miejsce do przerwy wokół binarne operator jest po operatorem, Nie przed nim.

 229
Author: user225312,
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
2015-05-12 18:17:35

Jeśli chcesz przypisać długi str do zmiennej, możesz to zrobić jak poniżej:

net_weights_pathname = (
    '/home/acgtyrant/BigDatas/'
    'model_configs/lenet_iter_10000.caffemodel')

Nie dodawaj przecinków, bo dostaniesz krotkę zawierającą wiele str!

 32
Author: acgtyrant,
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
2016-04-27 07:17:29

Działa również w Pythonie:

>>> 1+\
      2+\
3
6
>>> (1+
          2+
 3)
6
 20
Author: Abyx,
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
2010-11-13 12:20:12

Podczas próby wprowadzenia tekstu ciągłego (np. zapytania) Nie umieszczaj przecinków na końcu wiersza, ponieważ otrzymasz listę ciągów znaków zamiast jednego długiego ciągu:

queryText= "SELECT * FROM TABLE1 AS T1"\
"JOIN TABLE2 AS T2 ON T1.SOMETHING = T2.SOMETHING"\
"JOIN TABLE3 AS T3 ON T3.SOMETHING = T2.SOMETHING"\
"WHERE SOMETHING BETWEEN <WHATEVER> AND <WHATEVER ELSE>"\
"ORDER BY WHATEVERS DESC"
Coś w tym stylu.

Jest taki komentarz od acgtyrant, sorry, nie widziałem tego. :/

 14
Author: kotbeg,
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
2016-07-06 13:37:22

Kod związany z DB wygląda łatwiej na oczach w wielu wierszach, zamkniętych parą potrójnych cudzysłowów:

SQL = """SELECT
            id, 
            fld_1, 
            fld_2, 
            fld_3, 
            ...... 
         FROM some_tbl"""

Niż następująca jedna wielka długa linia:

SQL = "SELECT id, fld_1, fld_2, fld_3, .................................... FROM some_tbl"
 9
Author: Down the Stream,
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
2017-09-20 15:40:22

Z tego co wiem, Można to zrobić. Python ma ukrytą kontynuację linii (wewnątrz nawiasów, nawiasów i łańcuchów) dla potrójnie cytowanych łańcuchów ("""like this"""), a wcięcia linii kontynuacyjnych nie są ważne. Aby uzyskać więcej informacji, możesz przeczytać ten artykuł na temat analizy leksykalnej, z python.org.

 8
Author: Michael Foukarakis,
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
2016-10-24 06:57:22