Python: używanie 4 spacji do wcięć. Dlaczego? [zamknięte]

Podczas kodowania Pythona używam tylko 2 spacji do wcięcia, oczywiście PEP-8 naprawdę polecam mieć 4 spacje, ale historycznie dla mnie jest to niezwykłe.

Czy ktoś może mnie przekonać do używania 4 spacji zamiast 2? Jakie plusy i minusy?

P. S. i wreszcie, jaki jest łatwy sposób na konwersję wszystkich istniejących kodów z 2 spacji na 4 spacje?


P. P. S. PEP-8 również srictly zaleca nie używać tabs dla wcięcia. przeczytaj tutaj


Więc, do podsumowanie:

Plusy:

  • mają więcej miejsca do ułożenia podczas owijania sznurka o długości ponad 80 linii.
  • może kopiować kod z urywków i po prostu działa.

Wady:

  • przy głębszym poziomie zagnieżdżonych poleceń masz mniej miejsca na rzeczywisty kod.
Dzięki.
Author: smci, 2009-07-14

13 answers

Wszyscy inni używają 4 spacji. To jedyny powód, aby użyć 4 spacji, które spotkałem i zaakceptowałem. W moim sercu nadal chcę używać tabulatorów (1 znak wcięcie na wcięcie, ma sens, nie? Oddziel wcięcie od innych białych znaków. Nie obchodzi mnie, że tabulatory mogą być wyświetlane w różnych szerokościach, co nie robi różnicy składniowej. Najgorsze, co może się zdarzyć, to to, że niektóre komentarze się nie zgadzają. Horror!) ale zaakceptowałem, że skoro społeczność Pythona jako całość używa 4 spacje, używam 4 spacji. W ten sposób mogę zmontować kod z fragmentów napisanych przez innych i wszystko działa.

 92
Author: Markus,
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
2009-07-14 14:20:53

Podoba mi się fakt, że cztery znaki spacji ładnie wcięły wewnętrzny kod funkcji, ponieważ Def + jedna spacja tworzy cztery znaki.

def·foo():
····pass
 61
Author: Ionuț G. Stan,
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
2009-07-14 14:30:32

Myślę, że prawdziwe pytanie brzmi dlaczego spacje, a nie tabs.

Karty są wyraźnie lepsze:

  • to sprawia, że prawie niemożliwe jest mieć niespójne wcięcia (widziałem kod, który zwykle ma 4 wcięcia spacji, ale niektóre części zdają się być jedną spacją, trudno powiedzieć po prostej kontroli, czy jest 7 lub 8 spacji... Tak się nie stanie w przypadku tabs, chyba że ustawisz stop tabs na 1 spację).
  • Tab jest logicznąsemantyczną reprezentacją dla wcięcie, pozwala ci (i każdemu innemu programiście) wybrać wyświetlanie tyle "spacji" (a raczej kolumn), ile chcesz, bez mieszania z preferencjami innych osób.
  • jest to również mniej naciśnięć klawiszy , Jeśli masz tylko "Notatnik" (lub inny atrapa edytora) pod ręką.
  • Dodawanie i usuwanie kart jest operacją symetryczną . Większość IDE może wstawić automatycznie 4 spacje po naciśnięciu klawisza tab, ale zwykle usuwają tylko 1 spację po naciśnięciu klawisza backspace (operacja un-indent jest nadal dostępna jako shift-tab, ale jest to kombinacja dwóch klawiszy) lub użyj myszki, aby kliknąć w środku wcięcia i usunąć jeden znak.
  • zajmują tylko 1 bajt, a nie 4 (pomnóż przez tysiące linii, a zaoszczędzisz kilka KB! : p)
  • masz o jedną rzecz mniej do załatwienia umowy, bo jeśli zdecydujesz się na spacje, wtedy dyskusja zaczyna się od nowa, aby wybrać ile (chociaż konsensus wydaje się być wokół cztery).

Zalety przestrzeni:

    Guido je lubi.
  • nie można łatwo wpisać tutaj zakładki, przenosi ona ostrość (chociaż można ją wkleić).
 33
Author: fortran,
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-04-14 16:39:15

Nie ma "lepszego" wcięcia. To religijny temat świętej wojny. Cztery jest ładne, bo to wystarczy, aby wcięcia jasne, ale nie tak bardzo, że cały ekran jest głównie białe znaki i trzeba przewijać poziomo, aby przeczytać połowę programu.

Ma również plusy bycia "pół-tabulatorem" w / r do historycznej definicji "tabulatora"."

Poza tym, Użyj, co twoja grupa lubi. To jak czekolada kontra wanilia.

Łatwym sposobem przełączania jest użycie edytor z obsługą tabulatorów i spacji. Konwertuj wszystkie wiodące karty spacji na karty, Ustaw rozmiar karty na cztery, a następnie Konwertuj wiodące karty z powrotem na spacje.

Całkiem łatwe do zrobienia ze skryptem Pythona też. Po prostu policz wszystkie początkowe spacje, a następnie dodaj tę samą kwotę do początku linii i zapisz ją z powrotem.

 12
Author: Christopher,
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
2009-07-14 14:20:22

PEP nie jest twoim szefem. Jeśli jest on już konsekwentnie wcięty w dwie spacje, nie ma powodu, aby zmieniać cały kod, aby był zgodny z nim. Możesz iść dalej, jeśli naprawdę uważasz, że jest to tak istotne, ale szczerze mówiąc, nie. lepiej idź z jakąkolwiek konwencją zapewnia ci (i współpracownikom) najwięcej komfortu zarówno w czytaniu, jak i w pisaniu.

 8
Author: Pesto,
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
2009-07-14 14:20:40

Każdy porządny edytor (emacs, vim) wytworzy dla Ciebie ten cały nonsens. Będzie działać równie dobrze ze spacjami lub tabulatorami i może być skonfigurowany tak, aby używać dowolnej liczby spacji (lub dowolnej liczby szerokości spacji dla znaku tabulacji). Może również bez większych problemów konwertować między różnymi formatami (zobacz polecenie :retab w vim).

Jeśli próbujesz zbiorczo przekonwertować formatowanie źródeł, polecam rzucić okiem na narzędzie indent.

To powiedziane, I nie mogę się oprzeć odpowiedzi na inne pytanie... Moje preferencje zawsze były dla kart, ponieważ omija cały problem i każdy może przeglądać kod źródłowy z szerokościami ustawionymi według własnego uznania. Jest to również o wiele mniej pisania, gdy pracujesz w edytorach, które nie są pomocne w konwersji. Jeśli chodzi o 2 na 4 miejsca, to czysto kosmetyczne.

 6
Author: rmeador,
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
2009-07-14 14:26:53

Również jednym z powodów jest to, że gdy masz jakąś długą linię (dłuższą niż 80 symboli) i chcesz podzielić ją na 2, będziesz miał tylko 1 spację do wcięcia, co jest nieco mylące:

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
 and someotherstatementhere:
  # some code inside if block
  pass

if code80symbolslong and somelongvariablegoeshere and somelongerthan80symbols \
  and someotherstatementhere:
    # some code inside if block
    pass
 5
Author: HardQuestions,
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
2009-07-14 14:41:32

Jeśli jesteś jedynym programistą pracującym nad Twoim plikiem źródłowym i nie ma standardów kodowania, które wymuszają określony styl, używaj tego, co Ci odpowiada. Osobiście (i zgodnie z naszym standardem Kodowania) używam twardych zakładek, aby każdy, kto patrzy na kod, mógł korzystać z własnych preferencji.

Aby dokonać zmiany, wystarczy zmienić wszystkie przestrzenie początku linii na dwa razy większe. Istnieje wiele sposobów, aby to zrobić; w edytorze tekstu Vim, mogę myśleć o dwóch: po pierwsze:

:%s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)

Jest to proste wyrażenie regularne, które wyszukuje jedną lub więcej par spacji na początku linii i zastępuje je dwukrotnie większą liczbą spacji niż została znaleziona. Można go rozszerzyć o wszystkie pliki, otwierając Vima za pomocą:

vim *.py

(lub równoważny), po którym następuje (nieprzetestowany):

:argdo %s/^\(\s\{2}\)\+/\=repeat(' ', len(submatch(0))*2)/ | w

Alternatywnie:

" Switch to hard tabs:
:set noexpandtab
" Set the tab stop to the current setting
:set tabstop=2
" Change all spaces to tabs based on tabstop
:retab!
" Change the tab stop to the new setting
:set tabstop=4
" Go back to soft tabs
:set expandtab
" Replace all the tabs in the current file to spaces
:retab

Oczywiście wiele innych narzędzi będzie oferować podobne funkcje: zdziwiłbym się, gdyby coś takiego sed, awk, perl or python couldn ' t do to bardzo proste.

 4
Author: DrAl,
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
2009-07-14 14:25:48

Identacja i ogólne standardy stylu kodowania różnią się w zależności od języka, projektu i projektu. Jest jeden powód przyjęcia standardu stylu kodowania: aby Kod wyglądał jednolicie, bez względu na to, kto go napisał. To poprawia czytelność projektu, a mówiąc wprost, wygląda lepiej.

Jest jeden powód, który nie jest ważny przy przyjmowaniu standardu stylu kodowania: ponieważ go lubisz. Standardy kodowania istnieją właśnie dlatego, że preferencje ludzi są różne, a jeśli pozostawione ich własny, chaos spowodowałby, ze szkodą dla wszystkich.

Jeśli piszesz kod sam dla siebie, którego nikt nigdy nie przeczyta, śmiało pisz go jak chcesz. W przeciwnym razie przestrzeganie przyjętych standardów społeczności sprawi, że Twój kod będzie o wiele przyjemniejszy dla oczu innych. Pamiętaj też, że jeśli w przyszłości zdecydujesz się wnieść kod do społeczności, będziesz miał łatwiejszy czas, jeśli już przyzwyczaisz się do ich stylu kodowania.

Jak zmienić kartę rozmiar, istnieje wiele formaterów kodu źródłowego, które obsługują Python, a większość edytorów i IDE programistów ma również tę możliwość. Prawdopodobnie już to masz, to tylko kwestia zapoznania się z dokumentacją edytora, którego używasz.

 3
Author: Daniel C. Sobral,
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
2009-07-14 14:25:27

Jednym z powodów jest to, że jeśli użyjesz mniej spacji do wcięć, będziesz mógł zagnieżdżać więcej instrukcji(ponieważ długość linii jest zwykle ograniczona do 80).

Teraz jestem prawie pewien, że niektórzy nadal nie zgadzają się co do tego, ile zagnieżdżonych konstrukcji powinno być maksimum.

 2
Author: Bastien Léonard,
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
2009-07-14 14:29:15

Łatwiej jest wizualnie zidentyfikować długie zagnieżdżone bloki kodu z 4 spacjami. Oszczędza czas podczas debugowania.

 1
Author: ,
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-02-22 18:00:48

Jeśli chcesz pisać kod Pythona razem z innymi programistami, staje się to problemem, jeśli używasz innego wcięcia jako nich. Większość programistów Pythona używa 4-spacji.

 1
Author: Christian,
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-07-11 21:50:56

Użycie 4 spacji lub 2 spacji zależy wyłącznie od Ciebie. 4 spaces to tylko konwencja. Co najważniejsze, nie mieszaj tabulatorów i spacji. Użyj spacji

 0
Author: ghostdog74,
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
2009-07-14 14:25:51