W porównaniu do języków takich jak Perl, Python ma ograniczoną liczbę konstrukcji kontrolnych:
- tylko
ifi nie unless,
- tylko
forże iteracje nad sekwencjami i brak foreachlub C-stylu for,
- tylko
whileto sprawdza warunek w każdej pętli i nie do-while,
- tylko
if-elifi nie switch,
- istnieje tylko jedna konstrukcja komentarza
#, a dla każdej linii można stwierdzić, czy jest komentowana, czy nie, bez patrzenia na poprzednie linie.
Ponadto istnieje prawie jeden sposób na wcięcie źródła; większość przypadków twórczego wcięcia jest syntaktycznie wykluczona.
To sprawia, że parsowanie źródła Python jest łatwiejsze dla ludzi.
Próbuje się być minimalnym, ale kompletnym we wbudowanych typach i standardowej bibliotece.
- dla listy zmiennych można użyć jedynego wbudowanego
listtypu; jest to O (1) dla większości operacji i nigdy nie musisz wybierać właściwej implementacji,
- w przypadku niezmiennych listów po prostu używasz tego
tupletypu,
- w przypadku map korzystasz z jedynego wbudowanego,
dictktóry jest cholernie wydajny w większości przypadków, nie musisz zastanawiać się, którą implementację zastosować.
Python 3 rozszerza to na liczby całkowite: bez względu na to, jak duża jest twoja liczba całkowita, używasz tego samego typu i nigdy nie dbasz o przymus.
Python próbuje uniknąć cukru syntaktycznego. Ale czasami dodaje cukier syntaktyczny, aby oczywisty sposób był oczywisty. Możesz pisać if foo is not Nonezamiast tego, if not (foo is None)ponieważ „nie jest” jest w specjalnej obudowie. Nadal foo is not Noneczyta łatwo, nie można go źle interpretować i nie musisz myśleć, po prostu piszesz oczywiste rzeczy.
Oczywiście większość bardziej złożonych rzeczy w Pythonie można wykonać na kilka sposobów. Możesz dodawać metody do klas poprzez deklarację lub proste przypisanie szczelin, możesz przekazywać argumenty do funkcji na wiele kreatywnych sposobów itp. To tylko dlatego, że wewnętrzne elementy języka są w większości odsłonięte.
Kluczem jest to, że zawsze istnieje jeden sposób, który ma być najlepszy, obejmujący wszystko. Jeśli istnieją inne sposoby, nie zostały one dodane jako równe alternatywy (jak ifi unless), a jedynie ujawniają wewnętrzne funkcjonowanie. Powoli, ale konsekwentnie, takie alternatywy są przestarzałe (nie wyeliminowane!) Poprzez ulepszenie znanego najlepszego mechanizmu.
Dekoratorzy zawijają wywołania funkcji AOP. Przed wersją 2.6 musiałeś użyć __metaclass__członka magii, aby zadeklarować metaklasę klasy; teraz możesz również użyć do tego tej samej składni dekoratora. Przed wersją 3.0 istniały dwa rodzaje ciągów, zorientowane na bajty i Unicode, które można przypadkowo zmiksować. Teraz masz jedyny Unicode stri jedyny binarny bytes, którego nie można pomyłkowo wymieszać.
"""komentarzach (dokumentach). Obejmują one wiele linii.