Najkrótszy możliwy regulamin
Python słynie z czytelności, a w dużej mierze wynika to z tego, jak mało zasad składni ma ten język. Te, które mają znaczenie, zmieszczą się na jednej stronie:
- Jedna instrukcja w linii.
- Wcięcia wyznaczają strukturę: bez klamer, bez słów kluczowych
end. - Wielkość liter ma znaczenie.
nameiNameto co innego. :otwiera blok; następne linie z wcięciem pod nim są ciałem bloku.#rozpoczyna komentarz.
To w zasadzie wszystko. Reszta to zmienne, funkcje i nawyki z biblioteki standardowej, które przyswoisz po drodze. Przejdźmy przez te pięć zasad z takim kontekstem, żeby przestały wyglądać jak zasady, a zaczęły jak naturalny kształt języka.
Jedna instrukcja w linii
Instrukcja to kompletne polecenie: "wypisz to", "dodaj te", "przypisz tamto". W Pythonie każda instrukcja trafia do osobnej linii:
Trzy instrukcje, trzy linie. Na końcu nie potrzebujesz średnika i większość kodu w Pythonie ich nie używa. (Możesz umieścić dwie instrukcje w jednej linii, rozdzielając je średnikiem, ale uchodzi to za zły styl. Nie rób tego.)
Jeśli linia naprawdę musi być długa, możesz ją złamać w naturalnym miejscu wewnątrz nawiasów okrągłych, kwadratowych albo klamrowych, a Python nie będzie narzekać:
Albo, rzadziej, zakończyć linię ukośnikiem wstecznym, żeby ją kontynuować. Gdy się da, wybieraj sztuczkę z nawiasami: używa jej większość projektów.
Wcięcia tworzą strukturę
Tu potykają się nowicjusze. W Pythonie białe znaki na początku linii mają znaczenie. Mówią Pythonowi, które linie należą do siebie.
Spójrz na proste if:
Dwie linie po if hour < 12: mają wcięcie na cztery spacje. Python odczytuje to wcięcie jako "te dwie linie są ciałem if". Ostatnie print wraca do lewego marginesu, więc Python uznaje je za leżące poza if.
Jeśli usuniesz wcięcie, if przestanie działać. Jeśli dodasz jedną spację za dużo, if też przestanie działać. Python jest tu surowy, bo wcięcie jest strukturą: nie ma { ani end, które by je wspierały.
Wynika z tego kilka zasad:
- Wybierz cztery spacje na poziom wcięcia i trzymaj się tego. To konwencja PEP 8 i domyślne ustawienie każdego edytora dla plików
.py. - Nie mieszaj tabulatorów i spacji. Python 3 odrzuci plik, który używa obu. Nowoczesne edytory przy zapisie automatycznie zamieniają tabulatory na spacje; upewnij się, że twój jest tak ustawiony.
- Błędy wcięć będą się zdarzać. Gdy się pojawią, komunikat błędu poda numer linii. Sprawdź, czy białe znaki na początku tej linii są takie same jak w sąsiednich liniach.
Dwukropek otwiera blok
Każda konstrukcja, która tworzy zagnieżdżony blok (if, else, for, while, def, class, with, try), kończy linię nagłówka dwukropkiem. Następne linie z wcięciem tworzą ciało bloku:
Zwróć uwagę na dwie rzeczy: dwukropek na końcu nagłówka i wcięcie na cztery spacje w liniach ciała. Jeśli zapomnisz dwukropka, Python zgłosi coś w rodzaju SyntaxError: expected ':'. Ten błąd jest jednoznaczny: dodaj brakujący znak i gotowe.
Wielkość liter
Python traktuje Name, name i NAME jako trzy zupełnie osobne rzeczy. Dotyczy to:
- Twoich własnych zmiennych i funkcji.
- Wbudowanych nazw, takich jak
print,len,True,False,None. - Nazw modułów i atrybutów.
Zwykle daje to o sobie znać tylko wtedy, gdy przypadkiem napiszesz coś wielką literą. True to logiczna wartość prawdy; true to niezdefiniowana zmienna, która zgłasza NameError. Print(...) to nie funkcja print, tylko literówka.
Jeśli błąd mówi "name 'X' is not defined", a masz pewność, że ta nazwa jest zdefiniowana, najpierw sprawdź wielkość liter. W dziewięciu przypadkach na dziesięć to ona jest winna.
Komentarze z #
Wszystko po # w linii to komentarz: Python całkowicie go ignoruje. Komentarze to notatki dla przyszłych czytelników (także dla ciebie w przyszłości):
Python nie ma składni komentarza wieloliniowego. Jeśli potrzebujesz kilku linii, użyj kilku linii z #. (Czasem zobaczysz napisy w potrójnym cudzysłowie używane jako pseudokomentarze. To osobna rzecz, zwana docstringiem, i omówimy ją przy funkcjach.)
Słowa zarezerwowane
Kilku słów nie wolno używać jako nazw zmiennych, bo używa ich sam Python: if, else, for, while, def, class, return, import, from, as, pass, break, continue, True, False, None, and, or, not, in, is, lambda, try, except, finally, raise, with, yield, global, nonlocal, async, await. Nie musisz uczyć się tej listy na pamięć. Jeśli spróbujesz użyć któregoś z nich, Python od razu zaprotestuje.
Wiesz wystarczająco dużo, żeby czytać dowolny plik Pythona
Każda zasada z tej strony dotyczy każdego pliku Pythona, zarówno dwulinijkowego skryptu, jak i projektu na sto tysięcy linii. Reszta języka jest zbudowana na tych pięciu pomysłach. Jeśli plik wygląda zagmatwanie, rozwiązaniem prawie zawsze jest zwrócenie uwagi najpierw na wcięcia. Wcięcia mówią ci, co robi kod, zanim jeszcze przeczytasz, co jest w liniach.
Dalej: komentarze nieco dokładniej, a do tego docstringi, czyli sposób, w jaki Python obsługuje dokumentację funkcji i modułów.
Najczęściej zadawane pytania
Dlaczego Pythonowi zależy na wcięciach?
Python używa wcięć, żeby ustalić, które linie należą do siebie. Tam, gdzie inne języki otaczają grupy kodu klamrami { }, Python używa spójnych białych znaków na początku linii. To mniej wizualnego szumu, ale oznacza, że nie możesz niedbale traktować odstępów.
Ile spacji używać do wcięć w Pythonie?
Standardem społeczności (PEP 8) są cztery spacje na poziom. Większość edytorów wstawia cztery spacje po naciśnięciu Tab w pliku Pythona. Dokładna liczba ma mniejsze znaczenie niż konsekwencja: mieszanie wcięć na dwie i cztery spacje w tym samym bloku to częsty błąd.
Czy Python rozróżnia wielkość liter?
Tak. Name, name i NAME to trzy różne zmienne. Wbudowane nazwy, takie jak print i True, trzeba pisać dokładnie tak, jak pokazano: True działa, a true zgłasza błąd.