Jak mogę przerwać tę długą linię w Pythonie?
Jak byś się zajął formatowaniem długiej linii, takiej jak ta? Chciałbym, aby było to nie więcej niż 80 znaków szerokości:
logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))
Czy to moja najlepsza opcja?
url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))
4 answers
To jakiś początek. Nie jest złą praktyką definiowanie dłuższych ciągów poza kodem, który ich używa. To sposób na oddzielenie danych od zachowania. Pierwszą opcją jest połączenie liter ciągów w sposób niejawny, czyniąc je sąsiadującymi ze sobą:
("This is the first line of my text, "
"which will be joined to a second.")
Lub z kontynuacjami końcowymi linii, które są trochę delikatniejsze, ponieważ to działa:
"This is the first line of my text, " \
"which will be joined to a second."
Ale to nie:
"This is the first line of my text, " \
"which will be joined to a second."
Widzisz różnicę? Nie? Cóż, nie będziesz, gdy to Twój kod ani jedno, ani drugie.
Minusem połączenia implicit jest to, że działa tylko z literałami ciągów, a nie z ciągami zaczerpniętymi z zmienne, Więc po refakturowaniu sprawy mogą być bardziej owłosione. Ponadto formatowanie można interpolować tylko na połączonym łańcuchu jako całości.
Alternatywnie, możesz dołączyć jawnie używając operatora konkatenacji(+
):
("This is the first line of my text, " +
"which will be joined to a second.")
Explicit jest lepszy niż implicit, jak mówi Zen Pythona, ale to tworzy trzy ciągi zamiast jednego i używa dwa razy więcej pamięci: są dwa, które napisałeś, plus jeden, który jest dwojgiem z nich połączonych, więc musisz wiedzieć, kiedy ignorować Zen. Plusem jest to, że można zastosować formatowanie do każdy z podciągów osobno w każdej linii lub do całej partii spoza nawiasów.
Wreszcie, możesz użyć potrójnie cytowanych ciągów:
"""This is the first line of my text
which will be joined to a second."""
Jest to często mój ulubiony, choć jego zachowanie jest nieco inne, jak znak nowego wiersza i wszystkie wiodące białe znaki w kolejnych wierszach pojawi się w twoim ostatnim sznurku. Nowy wiersz można wyeliminować za pomocą odwrotnego ukośnika.
"""This is the first line of my text \
which will be joined to a second."""
Ma to ten sam problem, co ta sama technika powyżej, w tym poprawnym kodzie różni się tylko od nieprawidłowego kodu niewidocznymi białymi spacjami.
Który z nich jest "najlepszy" zależy od konkretnej sytuacji, ale odpowiedź nie jest po prostu estetyczna, ale jedno z subtelnie różnych zachowań.
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-01-13 17:59:25
Kolejne literały ciągu są połączone przez kompilator, a wyrażenia w nawiasie są uważane za pojedynczą linię kodu:
logger.info("Skipping {0} because it's thumbnail was "
"already in our system as {1}.".format(line[indexes['url']],
video.title))
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-01-13 17:43:47
Osobiście nie lubię wiszących otwartych klocków, więc sformatowałbym to jako:
logger.info(
'Skipping {0} because its thumbnail was already in our system as {1}.'
.format(line[indexes['url']], video.title)
)
Ogólnie nie zawracałbym sobie głowy zbyt trudną walką, aby Kod pasował dokładnie do 80-Kolumnowej linii. Warto ograniczyć długość linii do rozsądnych poziomów, ale limit hard 80 należy do przeszłości.
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-01-13 17:58:10
Możesz użyć modułu texttwrap, aby podzielić go na kilka linii
import textwrap
str="ABCDEFGHIJKLIMNO"
print("\n".join(textwrap.wrap(str,8)))
ABCDEFGH
IJKLIMNO
Textwrap.wrap (tekst [, szerokość [,...]])
Zawija pojedynczy akapit w tekst (ciąg znaków), więc każda linia ma długość znaków o największej szerokości. Zwraca listę linii wyjściowych bez końcowych znaków nowego wiersza.Opcjonalne argumenty słów kluczowych odpowiadają atrybutom instancji
TextWrapper
, udokumentowane poniżej. szerokość domyślna to70
.Zobacz
TextWrapper.wrap()
metoda dla dodatkowych szczegółów na temat zachowania wrap ().
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
2018-07-23 17:20:56