Poprawny styl łamania linii podczas łączenia metod w Pythonie
Mam taki kod. Czy przerwa powinna nastąpić przed miesiączką czy po?
# before
my_var = somethinglikethis.where(we=do_things).where(we=domore).where(we=everdomore)
# this way
my_var = somethinglikethis.where(we=do_things) \
.where(we=domore) \
.where(we=everdomore)
# or this way
my_var = somethinglikethis.where(we=do_things). \
where(we=domore). \
where(we=everdomore)
5 answers
PEP 8 zaleca używanie nawiasów, aby nie było potrzeby \
, i delikatnie sugeruje łamanie przed operatorami binarnymi zamiast po nich. Tak więc preferowany sposób formatowania kodu jest następujący:
my_var = (somethinglikethis
.where(we=do_things)
.where(we=domore)
.where(we=everdomore))
Dwa istotne fragmenty to ten z Maksymalna długość linii sekcja:
Preferowanym sposobem owijania długich linii jest użycie implikowanej linii Pythona w nawiasach, nawiasach i nawiasach klamrowych. Długie linie mogą być łamane przez wiele linii przez zawijanie wyrażeń w nawiasy. Powinny one być używane zamiast odwrotnego ukośnika dla kontynuacji linii.
... a cały powinien przerwać wiersz przed czy po operatorze binarnym? sekcja:
Czy linia powinna pękać przed czy po operatorze binarnym?
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 rozproszone w różnych kolumnach na ekranie, a każdy operator jest odszedł od operandu i przeszedł na poprzednią linię. Tutaj, oko musi wykonać dodatkową pracę, aby stwierdzić, które elementy są dodawane, a które są odejmowane:
# No: operators sit far away from their operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
Aby rozwiązać ten problem czytelności, matematycy i ich wydawcy postępuj zgodnie z przeciwną konwencją. Donald Knuth wyjaśnia tradycyjne zasada w serii komputerów i składu : "chociaż formuły w obrębie akapitu zawsze przerwa po operacji binarnych i relacje, wyświetlane formuły zawsze pękają przed operacjami binarnymi "
Podążanie za tradycją z matematyki zwykle skutkuje bardziej czytelny kod:
# Yes: easy to match operators with operands income = (gross_wages + taxable_interest + (dividends - qualified_dividends) - ira_deduction - student_loan_interest)
W kodzie Pythona dozwolone jest łamanie przed lub po binarnym operator, o ile konwencja jest spójna lokalnie. Dla nowych sugerowany jest styl kodu Knutha.
Zauważ, że, jak wskazano w powyższym cytacie, PEP 8 użył , aby dać przeciwną Radę o tym, gdzie złamać wokół operator, cytowany poniżej dla potomności:
Preferowanym sposobem owijania długich linii jest użycie domyślnej linii Pythona kontynuacja wewnątrz nawiasów, nawiasów i szelek. Długie linie mogą być łamane przez wiele linii przez zawijanie wyrażeń w nawiasy. Te powinien być używany zamiast odwrotnego ukośnika dla kontynuacji linii. Upewnij się, że kontynuowana linia jest odpowiednio wcięta. Preferowane miejsce złamanie wokół operatora binarnego to po {[7] } centrala, nie wcześniej. Niektóre przykłady:
class Rectangle(Blob): def __init__(self, width, height, color='black', emphasis=None, highlight=0): if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong' or highlight > 100): raise ValueError("sorry, you lose") if width == 0 and height == 0 and (color == 'red' or emphasis is None): raise ValueError("I don't think so -- values are %s, %s" % (width, height)) Blob.__init__(self, width, height, color, emphasis, highlight)
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-01-07 20:39:23
PEP 8 mówi, że łamanie przed operatorem jest preferowane:
Donald Knuth wyjaśnia tradycyjną zasadę w swoich komputerach i seriach składowych: "chociaż formuły w akapicie zawsze pękają po operacjach binarnych i relacjach, wyświetlane formuły zawsze pękają przed operacjami binarnymi".
...
W kodzie Pythona dozwolone jest łamanie przed lub po operatorze binarnym, o ile konwencja jest spójna lokalnie. Dla nowego kodu Sugerowany jest styl Knutha.
Https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator
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-05-09 11:54:42
FWIW, autopep8 (z flagą --aggressive
) wyprodukował to z twojego oryginalnego kodu:
my_var = somethinglikethis.where(
we=do_things).where(
we=domore).where(
we=everdomore)
Ale Zgadzam się -- rozwiązanie Bastiena jest bardziej eleganckie.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
2014-02-18 15:44:38
Rób to, co działa.
Sprawdź również ten dokument na temat mitów o wcięciach w Pythonie. Które można znaleźć proszę..
Zaczyna się od:
" białe znaki są znaczące w kodzie źródłowym Pythona."
Nie, Nie w ogóle. Tylko poziom wcięcia twoich wypowiedzi jest znacząca (np. Biała spacja po lewej stronie wypowiedzi). Wszędzie indziej białe znaki nie są znaczące i mogą być używane tak, jak ty jak w każdym innym języku. Można również wstawiać puste wiersze które nie zawierają nigdzie (lub tylko dowolne białe znaki).
Mam nadzieję, że to pomoże.
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-10-30 00:39:50
Tam naprawdę nie ma żadnych złych sposobów. Wszystkie wymienione będą działać tak samo.
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-10-30 00:42:44