Jak PEP8 sugeruje trzymanie poniżej reguły 80 kolumn dla twojego programu python, jak mogę to zrobić z długimi łańcuchami, tj.
s = "this is my really, really, really, really, really, really, really long string that I'd like to shorten."
Jak mógłbym przejść do rozszerzenia tego do następującej linii, tj
s = "this is my really, really, really, really, really, really" +
"really long string that I'd like to shorten."
Ponadto, ponieważ sąsiednie stałe ciągów są automatycznie łączone, możesz również kodować w ten sposób:
Zauważ, że nie ma znaku plus, a ja dodałem dodatkowy przecinek i spację, które następują po sformatowaniu twojego przykładu.
Osobiście nie lubię ukośników odwrotnych i przypominam sobie gdzieś, że jego użycie jest przestarzałe na rzecz tej formy, która jest bardziej wyraźna. Pamiętaj „Jawne jest lepsze niż niejawne”.
Uważam, że odwrotny ukośnik jest mniej wyraźny i mniej użyteczny, ponieważ w rzeczywistości ucieka on od znaku nowej linii. Jeśli to konieczne, nie można wstawić komentarza na końcu wiersza. Można to zrobić za pomocą połączonych stałych łańcuchowych:
Użyłem wyszukiwarki Google „długość linii python”, która jako pierwszy wynik zwraca link PEP8, ale także linki do innego dobrego postu StackOverflow na ten temat: „ Dlaczego Python PEP-8 powinien określać maksymalną długość linii wynoszącą 79 znaków? ”
Inną dobrą frazą wyszukiwania byłaby „kontynuacja linii python”.
źródło
"str1" + "str2"
zamiast"str1" "str2"
('this is my really, really, really, really, really long {} ' 'that I'd really, really, really, like to {}').format(var1, var2))
Myślę, że najważniejszym słowem w twoim pytaniu było „sugeruje”.
Standardy kodowania to śmieszne rzeczy. Często dostarczane przez nich wskazówki mają naprawdę dobrą podstawę (np. Większość terminali nie jest w stanie wyświetlić> 80 znaków w linii), ale z czasem stają się przestarzałe funkcjonalnie, ale nadal są ściśle przestrzegane. Wydaje mi się, że powinieneś tutaj wyważyć względne zalety „przełamania” tej konkretnej sugestii w stosunku do czytelności i możliwości kodowania twojego kodu.
Przepraszamy, to nie odpowiada bezpośrednio na twoje pytanie.
źródło
Straciłeś spację i prawdopodobnie potrzebujesz znaku kontynuacji linii, tj.
\
.lub nawet:
Parens również działałyby zamiast kontynuacji linii, ale ryzykujesz, że ktoś pomyśli, że masz krotkę i właśnie zapomniałeś przecinka. Weź na przykład:
przeciw:
Dzięki dynamicznemu pisaniu w Pythonie kod może działać w obie strony, ale generować niepoprawne wyniki z tym, którego nie zamierzałeś.
źródło
Ukośnik wsteczny:
lub zawiń pareny:
źródło
To są świetne odpowiedzi, ale nie mogłem znaleźć wtyczki edytora, która pomogłaby mi w edycji ciągów „niejawnie połączonych”, więc napisałem pakiet, aby to dla mnie łatwiejsze.
Na pip (zainstaluj akapity), jeśli ktokolwiek błąka się po tym starym wątku, chciałby to sprawdzić. Formatuje ciągi wielowierszowe tak, jak robi to HTML (kompresuj białe znaki, dwie nowe linie dla nowego akapitu, nie martw się spacjami między wierszami).
staje się ...
Wszystko łatwo zrówna się z (Vim) „gq”
źródło
Za pomocą
\
można rozwinąć instrukcje do wielu wierszy:powinno działać.
źródło
Zwykle używam kilku metod nie wymienionych tutaj do określania dużych ciągów, ale są to dla bardzo specyficznych scenariuszy. YMMV ...
Wieloliniowe obiekty BLOB tekstu, często ze sformatowanymi tokenami (niezupełnie o co prosiłeś, ale wciąż przydatne):
Rozwijaj zmienną kawałek po kawałku za pomocą dowolnej metody interpolacji ciągów:
Przeczytaj to z pliku. PEP-8 nie ogranicza długości ciągów w pliku; tylko linie kodu. :)
Użyj narzędzia Brute-Force lub edytora, aby podzielić ciąg na linie managaeble przy użyciu nowych linii, a następnie usuń wszystkie nowe linie. (Podobnie do pierwszej wymienionej przeze mnie techniki):
źródło
Dostępne opcje:
"foo" \ "bar"
"foo" + \ "bar"
("foo" "bar")
("foo" + "bar")
Uniknąć
Unikaj nawiasów przecinkowych:
("foo", "bar")
definiuje krotkę.źródło
Jeśli musisz wstawić literał długiego łańcucha i chcesz, aby flake8 się zamknął, możesz użyć jego dyrektyw zamykających . Na przykład w procedurze testowania zdefiniowałem fałszywe dane CSV. Przekonałem się, że podzielenie go na więcej wierszy niż wierszy byłoby bardzo mylące, dlatego postanowiłem dodać,
# noqa: E501
co następuje:źródło
W przeszłości korzystałem z textwrap.dedent. Jest to trochę kłopotliwe, więc wolę teraz kontynuację linii, ale jeśli naprawdę chcesz wcięcia blokowe, myślę, że to świetnie.
Przykładowy kod (gdzie wykończeniem jest pozbycie się pierwszego „\ n” plasterkiem):
Wyjaśnienie:
dedent oblicza wcięcie na podstawie białej spacji w pierwszym wierszu tekstu przed nowym wierszem. Jeśli chcesz go ulepszyć, możesz łatwo go zaimplementować za pomocą
re
modułu.Ta metoda ma ograniczenia w tym, że bardzo długie linie mogą być jeszcze dłuższe niż chcesz, w którym to przypadku inne metody konkatenacji łańcuchów są bardziej odpowiednie.
źródło
x[1:]
można wstawić ukośnik odwrotny,x = """
aby uniknąć pierwszej nowej linii.