Jak zabrałbyś się do formatowania tak długiej linii? Chciałbym, aby szerokość nie przekraczała 80 znaków:
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))
python
formatting
code-formatting
Gattster
źródło
źródło
indexes
: poprawna liczba mnogaindex
toindices
.Odpowiedzi:
To jest początek. Definiowanie dłuższych ciągów poza kodem, który ich używa, nie jest złą praktyką. To sposób na oddzielenie danych i zachowania. Pierwszą opcją jest niejawne łączenie ze sobą literałów łańcuchowych, ustawiając je obok siebie:
Lub z kontynuacjami kończącymi linię, co jest nieco bardziej delikatne, ponieważ działa:
Ale to nie jest:
Zobacz różnicę? Nie? Cóż, nie zrobisz tego, jeśli to twój kod.
Wadą niejawnego łączenia jest to, że działa tylko z literałami łańcuchowymi, a nie z łańcuchami pobranymi ze zmiennych, więc rzeczy mogą stać się trochę bardziej skomplikowane podczas refaktoryzacji. Ponadto można interpolować formatowanie tylko dla połączonego ciągu jako całości.
Alternatywnie możesz dołączyć jawnie za pomocą operatora konkatenacji (
+
):Jawne jest lepsze niż niejawne, jak mówi zen w Pythonie, ale tworzy to trzy ciągi zamiast jednego i zużywa dwa razy więcej pamięci: są dwa, które napisałeś, plus jeden, który jest połączeniem dwóch z nich, więc trzeba wiedzieć, kiedy ignorować zen. Plusem jest to, że możesz zastosować formatowanie do dowolnego z podciągów osobno w każdym wierszu lub do całej partii spoza nawiasów.
Na koniec możesz użyć ciągów w potrójnych cudzysłowach:
Jest to często mój ulubiony element, chociaż jego zachowanie jest nieco inne, ponieważ nowa linia i wszelkie początkowe białe znaki w kolejnych wierszach pojawią się w końcowym ciągu. Możesz usunąć znak nowej linii za pomocą uciekającego odwrotnego ukośnika.
Ma to ten sam problem, co ta sama technika powyżej, ponieważ poprawny kod różni się od niepoprawnego tylko niewidoczną białą spacją.
To, które z nich jest „najlepsze”, zależy od konkretnej sytuacji, ale odpowiedź nie jest po prostu estetyczna, ale jest jednym z subtelnie różnych zachowań.
źródło
'
aby zawrzeć ten ciąg, lub uciec od podwójnych cudzysłowów w ciągu lub użyć potrójnych podwójnych cudzysłowów"""
. Problem z napisami w cudzysłowie, które zawierają cudzysłowy, jest taki sam, niezależnie od tego, czy do zdefiniowania ciągu literału używany jest pojedynczy wiersz, czy wiele wierszy.+
.Kolejne literały ciągów są łączone przez kompilator, a wyrażenia w nawiasach są traktowane jako pojedynczy wiersz kodu:
źródło
Osobiście nie lubię wieszać otwartych bloków, więc sformatowałbym to jako:
Ogólnie nie zawracałbym sobie głowy zbyt ciężkim zmaganiem się z dopasowaniem kodu dokładnie do 80-kolumnowej linii. Warto utrzymywać długość linii na rozsądnym poziomie, ale twardy limit 80 to już przeszłość.
źródło
Możesz użyć modułu textwrap, aby podzielić go na wiele linii
Z dokumentacji :
źródło
Dla każdego, kto próbuje również wywołać
.format()
długi ciąg i nie jest w stanie użyć niektórych najpopularniejszych technik zawijania ciągów bez przerywania kolejnego.format(
wywołania, możesz to zrobićstr.format("", 1, 2)
zamiast"".format(1, 2)
. To pozwala zrywać strunę dowolną techniką. Na przykład:może być
W przeciwnym razie jedyną możliwością jest użycie kontynuacji zakończeń linii, których osobiście nie jestem fanem.
źródło