Widzę w Stack Overflow i PEP 8, że zaleceniem jest używanie spacji tylko do wcięć w programach Pythona. Rozumiem potrzebę konsekwentnego wcięcia i poczułem ten ból.
Czy istnieje jakiś podstawowy powód, dla którego należy preferować spacje? Myślałem, że praca z kartami jest znacznie łatwiejsza.
python
indentation
quamrana
źródło
źródło
Odpowiedzi:
Odpowiedź została udzielona bezpośrednio w PEP [red: ten fragment został zredagowany w 2013 r .]. Cytuję:
Jakiego innego podstawowego powodu potrzebujesz?
Mówiąc mniej wprost: rozważ także zakres PEP, jak określono w pierwszym akapicie:
Celem jest utworzenie całego kodu, który trafia do oficjalnej dystrybucji Pythona konsekwentne sformatowanie (mam nadzieję, że możemy się zgodzić, że jest to uniwersalna Dobra Rzecz ™).
Ponieważ decyzja między spacjami i tabulatorami dla pojedynczego programisty jest a) naprawdę kwestią gustu ib) łatwo można ją rozwiązać za pomocą środków technicznych (edytory, skrypty konwersji itp.), Istnieje jasny sposób na zakończenie dyskusji: wybierz jedną .
Guido był tym, który wybrał. Nie musiał nawet podawać powodu, ale zrobił to, odwołując się do danych empirycznych.
Do wszystkich innych celów możesz przyjąć ten PEP jako zalecenie lub możesz go zignorować - Twój wybór, Twój zespół lub lider zespołu.
Ale jeśli mogę ci dać jedną radę: nie mieszaj ich ;-) [red: Mieszanie tabulatorów i spacji nie jest już opcją.]
źródło
Cóż, wygląda na to, że wszyscy są mocno nastawieni na przestrzenie. Używam wyłącznie zakładek. Wiem dobrze, dlaczego.
Tabletki to tak naprawdę fajny wynalazek, który pojawił się później spacjach. Pozwala na wcięcie bez naciskania spacji miliony razy lub używania fałszywej zakładki (która tworzy spacje).
Naprawdę nie rozumiem, dlaczego wszyscy dyskryminują używanie zakładek. To bardzo przypomina starsze osoby, które dyskryminują młodszych ludzi za wybór nowszej, bardziej wydajnej technologii i narzekają, że wybieranie impulsowe działa na każdym telefonie , a nie tylko na tych nowych, wymyślnych. „Wybieranie tonowe nie działa na każdym telefonie, dlatego jest źle”.
Twój edytor nie obsługuje poprawnie zakładek? Cóż, kup nowoczesny edytor. To może być cholerny czas, jesteśmy teraz w XXI wieku, a czas, kiedy edytor był zaawansowanym technologicznie skomplikowanym oprogramowaniem, już dawno minął. Mamy teraz mnóstwo edytorów do wyboru, z których wszystkie dobrze obsługują zakładki. Możesz także określić, ile powinna być tabulator, czego nie można zrobić ze spacjami. Nie widzisz kart? Co to za argument? Cóż, nie możesz też zobaczyć spacji!
Czy mogę być tak odważny, aby zaproponować lepszy edytor? Jeden z tych zaawansowanych technologicznie, które ukazały się już jakieś 10 lat temu i które wyświetlają niewidzialne postacie ? (wyłącz sarkazm)
Używanie spacji powoduje znacznie więcej pracy przy usuwaniu i formatowaniu. Dlatego (i wszystkie inne osoby, które o tym wiedzą i się ze mną zgadzają) używają zakładek w Pythonie.
Mieszanie tabulatorów i spacji to nie-nie i żaden argument na ten temat. To jest bałagan i nigdy nie zadziała.
źródło
Osobiście nie zgadzam się ze spacjami nad tabulatorami. Dla mnie tabulatory są znakiem / mechanizmem układu dokumentu, podczas gdy spacje są dla treści lub rozgraniczenia między poleceniami w przypadku kodu.
Muszę zgodzić się z komentarzami Jima, że tak naprawdę nie chodzi o karty, tylko o ludzi i to, jak chcą mieszać tabulatory i spacje.
To powiedziawszy, zmusiłem się do wykorzystania przestrzeni ze względu na konwencję. Cenię konsekwencję ponad osobiste preferencje.
źródło
Powodem spacji jest to, że tabulatory są opcjonalne. Spacje to rzeczywisty najmniejszy wspólny mianownik w interpunkcji.
Każdy przyzwoity edytor tekstu ma "zamień tabulatory na spacje" i wiele osób z tego korzysta. Ale nie zawsze.
Chociaż niektóre edytory tekstu mogą zastąpić kilka spacji tabulatorem, jest to naprawdę rzadkie.
Podsumowanie . Nie możesz się pomylić ze spacjami. Państwo może pomylić z zakładkami. Dlatego nie używaj zakładek i zmniejsz ryzyko błędów.
źródło
Problem z zakładkami polega na tym, że są one niewidoczne, a ludzie nigdy nie mogą się zgodzić co do szerokości zakładek. Kiedy mieszasz tabulatory i spacje i ustawiasz tabulatory na coś innego niż Python (który używa tabulatorów co 8 spacji), zobaczysz kod w innym układzie niż widzi go Python. A ponieważ układ określa bloki, zobaczysz inną logikę. Prowadzi do subtelnych błędów.
Jeśli nalegasz na przeciwstawienie się PEP 8 i używanie tabulatorów - lub, co gorsza, mieszanie tabulatorów i spacji - przynajmniej zawsze uruchamiaj Pythona z argumentem „-tt”, co powoduje niespójne wcięcie (czasami tabulator, czasem spacja na to samo wcięcie poziom) błąd. Ponadto, jeśli to możliwe, ustaw edytor tak, aby wyświetlał karty w inny sposób. Ale tak naprawdę najlepszym podejściem jest nie używanie kart, kropka.
źródło
Główne problemy z wcięciami występują podczas mieszania tabulatorów i spacji. Oczywiście to nie mówi ci, który powinieneś wybrać, ale jest to dobry powód, aby go polecić, nawet jeśli wybierzesz go rzucając monetą.
Jednak IMHO istnieje kilka pomniejszych powodów, dla których warto faworyzować spacje nad tabulatorami:
Różne narzędzia. Czasami kod jest wyświetlany poza edytorem programisty. Na przykład. opublikowane na grupie dyskusyjnej lub forum. Spacje generalnie radzą sobie lepiej niż tabulatory - wszędzie tam, gdzie spacje uległyby zniekształceniu, tabulatory również, ale nie odwrotnie.
Programiści inaczej widzą źródło. Jest to głęboko subiektywne - albo jest to główna zaleta zakładek, albo powód, aby ich unikać, w zależności od tego, po której stronie jesteś. Z drugiej strony programiści mogą wyświetlać źródło z preferowanym wcięciem, więc programista preferujący wcięcie z 2 spacjami może współpracować z programistą z 8 miejscami na tym samym źródle i nadal widzieć je tak, jak im się podoba. Wadą jest to, że ma to swoje konsekwencje - niektórzy ludzie lubią 8-spacje, ponieważ daje to bardzo widoczną informację zwrotną, że są zbyt głęboko zagnieżdżone - mogą zobaczyć kod sprawdzany przez 2-wgłębnik stale zawijany w edytorze. Fakt, że każdy programista widzi kod w ten sam sposób, prowadzi do większej spójności długości linii, a także do innych spraw.
Ciągłe wcięcie wiersza. Czasami chcesz wciąć linię, aby wskazać, że jest przenoszona z poprzedniej. na przykład.
Jeśli używasz tabulatorów, nie ma możliwości wyrównywania tego dla osób używających różnych tabulatorów w swoim edytorze bez mieszania spacji i tabulatorów. To skutecznie zabija powyższą korzyść.
Jest to oczywiście głęboko religijny problem, z którym nękane jest programowanie. Najważniejszą kwestią jest to, że powinniśmy wybrać jeden - nawet jeśli nie ten, który preferujesz. Czasami myślę, że największą zaletą znacznych wgłębień jest to, że przynajmniej oszczędzono nam płomieni podczas umieszczania zamków.
Warto również odczyt jest ten artykuł Jamie Zawinski w tej sprawie.
źródło
Zwróć uwagę, że używanie zakładek myli inny aspekt PEP 8:
Załóżmy hipotetycznie, że używasz tabulatora o szerokości 2, a ja używam tabulatora o szerokości 8. Piszesz cały kod tak, aby najdłuższe linie miały 79 znaków, a potem zaczynam pracować nad twoim plikiem. Teraz mam trudny do odczytania kod, ponieważ (jak stwierdza PEP):
Jeśli wszyscy używamy 4 spacji, ZAWSZE jest tak samo. Każdy, kogo edytor obsługuje szerokość 80 znaków, może wygodnie odczytać kod. Uwaga: limit 80 znaków jest sam w sobie świętą wojną, więc nie zaczynajmy tego tutaj.
Każdy niepoważny edytor powinien mieć możliwość używania spacji tak, jakby były tabulacjami (zarówno wstawiającymi, jak i usuwającymi), więc to naprawdę nie powinno być prawidłowym argumentem.
źródło
Odpowiedź na pytanie brzmi: PEP-8 chce udzielić rekomendacji i zdecydował, że skoro spacje są bardziej popularne, zdecydowanie zaleci spacje nad tabulatorami.
Uwagi dotyczące PEP-8
PEP-8 mówi: „Użyj 4 spacji na poziom wcięcia”.
Jest jasne, że jest to standardowe zalecenie.
„W przypadku naprawdę starego kodu, którego nie chcesz zepsuć, możesz nadal używać tabulatorów z 8 spacjami”.
Oczywiste jest, że istnieją NIEKTÓRE okoliczności, w których można używać zakładek.
„Nigdy nie mieszaj tabulatorów i spacji”.
To wyraźny zakaz mieszania - myślę, że wszyscy się z tym zgadzamy. Python może to wykryć i często się dusi. Użycie argumentu -tt powoduje, że jest to jawny błąd.
„Najpopularniejszym sposobem tworzenia wcięć w Pythonie są tylko spacje. Drugim najpopularniejszym sposobem są tylko zakładki ”.
To wyraźnie stwierdza, że oba są używane. Dla jasności: nadal nigdy nie należy mieszać spacji i tabulatorów w tym samym pliku.
„W przypadku nowych projektów zdecydowanie zaleca się umieszczanie samych spacji nad tabulatorami”.
To wyraźne zalecenie i mocne, ale nie zakaz używania tabletek.
Nie mogę znaleźć dobrej odpowiedzi na własne pytanie w PEP-8. Używam zakładek, których wcześniej używałem w innych językach. Python akceptuje źródła z wyłącznym użyciem zakładek. To mi wystarczy.
Pomyślałem, że spróbuję pracować z przestrzeniami. W moim edytorze skonfigurowałem typ pliku tak, aby używał wyłącznie spacji, więc wstawia 4 spacje po naciśnięciu klawisza Tab. Jeśli naciskam tabulację zbyt wiele razy, muszę usunąć spacje! Arrgh! Cztery razy więcej usunięć niż zakładek! Mój redaktor nie może powiedzieć, że używam 4 spacji dla wcięć (chociaż edytor AN może to zrobić) i oczywiście nalega na usuwanie spacji pojedynczo.
Czy nie można powiedzieć Pythonowi, aby rozważał tabulatory jako n spacji, gdy jego wcięcia odczytu? Gdybyśmy mogli uzgodnić 4 spacje na wcięcie i 4 spacje na tabulator i pozwolić Pythonowi to zaakceptować, nie byłoby problemów.
Powinniśmy znaleźć rozwiązania problemów korzystne dla wszystkich.
źródło
Zawsze używałem zakładek w moim kodzie. To powiedziawszy, niedawno znalazłem powód, aby używać spacji: podczas programowania na moim tablecie internetowym Nokia N900 miałem teraz klawiaturę bez klawisza Tab. To zmusiło mnie do skopiowania i wklejenia zakładek lub ponownego napisania kodu ze spacjami. Mam ten sam problem z innymi telefonami. To prawda, że nie jest to standardowe użycie Pythona, ale należy o tym pamiętać.
źródło
JWZ mówi to najlepiej :
źródło
Ponieważ Python polega na wcięciach w celu rozpoznania struktury programu, wymagany jest jasny sposób identyfikacji. To jest powód, dla którego wybieramy spacje lub tabulatory.
Jednak Python ma również silną filozofię, aby robić rzeczy tylko w jeden sposób, dlatego powinno istnieć oficjalne zalecenie dotyczące jednego sposobu wykonywania wcięć.
Zarówno spacje, jak i tabulatory stanowią wyjątkowe wyzwanie dla edytora, który może obsługiwać jako wcięcia. Obsługa samych zakładek nie jest jednakowa dla wszystkich edytorów, a nawet ustawień użytkownika. Ponieważ przestrzenie nie są konfigurowalne, stanowią bardziej logiczny wybór, ponieważ gwarantują, że wynik będzie wyglądał wszędzie tak samo.
źródło
Najbardziej znaczącą zaletą, jaką mogę powiedzieć o spacjach nad tabulatorami, jest to, że wielu programistów i projektów używa określonej liczby kolumn dla kodu źródłowego, a jeśli ktoś zatwierdzi zmianę z tabulatorem ustawionym na 2 spacje, a projekt wykorzystuje 4 spacje jako tabstop długie linie będą zbyt długie dla okna edytora innych osób. Zgadzam się, że praca z kartami jest łatwiejsza, ale myślę, że spacje są łatwiejsze do współpracy, co jest ważne w przypadku dużego projektu open source, takiego jak Python.
źródło
Możesz wziąć ciasto i zjeść. Skonfiguruj edytor tak, aby automatycznie rozwijał karty w spacje.
(To byłoby
:set expandtab
w Vimie.)źródło
Domyślam się, że większość edytorów tekstu dla Linuksa sprawia, że ustawienia domyślne wyglądają na absurdalnie duże. Nie przychodzi mi do głowy żaden inny dobry powód, aby używać spacji nad tabulatorami.
źródło
Poza wszystkimi innymi już wymienionymi powodami (spójność, nigdy nie mieszanie spacji i tabulatorów itp.) Uważam, że jest jeszcze kilka powodów, dla których należy zwrócić uwagę na konwencję 4 spacji. Dotyczy to tylko Pythona (i być może innych języków, w których wcięcia mają znaczenie). Zakładki mogą być ładniejsze w innych językach, w zależności od indywidualnych preferencji.
Jeśli edytor nie pokazuje zakładek (co zdarza się, w zależności od konfiguracji, w kilku), inny autor może założyć, że twój kod używa 4 spacji, b / c prawie cały kod Pythona, który jest publicznie dostępny, robi; jeśli ten sam edytor ma szerokość tabulatora 4, mogą się wydarzyć nieprzyjemne rzeczy - przynajmniej ta biedna osoba straci czas na problem z wcięciami, którego bardzo łatwo byłoby uniknąć, trzymając się konwencji. Dlatego dla mnie najważniejszym powodem jest konsekwentne unikanie błędów.
Zastanawiając się, co jest lepsze, tabulatory czy spacje, należałoby zapytać, jakie są zalety tabulatorów; Widziałem wiele postów wychwalających tabulatory, ale kilka przekonujących argumentów za nimi; dobre edytory, takie jak emacs, vi (m), kate, ... wykonują odpowiednie wcięcia w zależności od semantyki twojego kodu - nawet bez tabulatorów; te same edytory można łatwo skonfigurować tak, aby cofały wcięcia w backspace itp.
Niektórzy ludzie mają bardzo silne preferencje, jeśli chodzi o ich swobodę w decydowaniu o wyglądzie / układzie kodu; inni cenią konsekwencję ponad tę wolność. Python drastycznie ogranicza tę swobodę, nakazując użycie wcięć dla bloków itp. Może to być postrzegane jako błąd lub funkcja, ale w pewnym sensie pojawia się przy wyborze Pythona. Osobiście podoba mi się ta spójność - zaczynając kodować w nowym projekcie, przynajmniej układ jest zbliżony do tego, do czego jestem przyzwyczajony, więc jest dość łatwy do odczytania. Prawie zawsze.
Używanie spacji do wcięć pozwala na „sztuczki układu”, które mogą ułatwić zrozumienie kodu; niektóre ich przykłady są wymienione w PEP8; na przykład.
Oczywiście powyższe można też ładnie zapisać jako
Jednak ta ostatnia zajmuje więcej linii kodu, a mniej wierszy jest czasami uważanych za lepsze (b / c dostajesz więcej na jednym ekranie). Ale jeśli lubisz wyrównywanie, spacje (najlepiej wspomagane przez dobrego edytora) dają w pewnym sensie większą swobodę w Pythonie niż tabulatory. [Cóż, wydaje mi się, że niektórzy redaktorzy pozwalają zrobić to samo z tabulatorami;) - ale ze spacjami, wszystkie z nich robią ...]
Wracając do tego samego argumentu, który robią wszyscy inni - PEP 8 dyktuje (ok, zdecydowanie zaleca) spacje. Jeśli przychodzisz do projektu, który używa tylko zakładek, oczywiście nie masz wielkiego wyboru. Jednak ze względu na ustanowienie konwencji PEP 8 prawie wszyscy programiści Pythona są przyzwyczajeni do tego stylu. To sprawia, że o wiele łatwiej jest znaleźć konsensus w sprawie stylu akceptowanego przez większość programistów ... a uzyskanie zgody poszczególnych osób na styl może być bardzo trudne.
Narzędzia, które pomagają egzekwować styl, są zazwyczaj świadome istnienia PEP 8 bez dodatkowego wysiłku. To nie jest dobry powód, ale fajnie jest mieć wszystko po wyjęciu z pudełka.
źródło
Uniwersalnym problemem związanym z zakładkami jest to, że mogą być one inaczej reprezentowane w różnych środowiskach.
W danym edytorze tabulator może mieć 8 spacji lub 2.
W niektórych edytorach możesz to kontrolować, w innych nie.
Innym problemem związanym z kartami jest sposób ich reprezentacji na wydruku. Uważam, że większość drukarek interpretuje tabulator jako 8 spacji.
W przypadku spacji nie ma wątpliwości. Wszystko ułoży się zgodnie z zamierzeniami autora.
źródło
O dyskusji między Jimem i Thomasem Woutersami w komentarzach.
Problem polegał na tym, że ... ponieważ szerokość tabulatorów i spacji może się różnić - a ponieważ programiści nie mogą uzgodnić żadnej szerokości - dlaczego tak jest, że winą są tabulatory.
Zgadzam się z Jimem w tej sprawie - zakładki NIE są złe same w sobie. Ale jest problem...
Dzięki przestrzeniom mogę kontrolować wygląd "MÓJ WŁASNY KOD" w KAŻDYM edytorze na świecie. Jeśli użyję 4 spacji - to bez względu na to, w jakim edytorze otworzysz mój kod, będzie miał taką samą odległość od lewego marginesu. W przypadku zakładek jestem zdany na łaskę ustawienia szerokości zakładki dla edytora - nawet dla MÓJ WŁASNY KOD. Nie podoba mi się to.
Tak więc, chociaż prawdą jest, że nawet spacje nie mogą zagwarantować spójności - zapewniają przynajmniej większą kontrolę nad wyglądem własnego kodu wszędzie - coś, czego nie mogą zapewnić tabulatory.
Myślę, że to NIE jest konsekwencja w pisaniu kodu przez programistów - ale spójność w edytorach pokazujących ten kod - że spacje ułatwiają osiągnięcie (i narzucenie).
źródło