W porównaniu do języków takich jak Perl, Python ma ograniczoną liczbę konstrukcji kontrolnych:
- tylko
if
i nie unless
,
- tylko
for
że iteracje nad sekwencjami i brak foreach
lub C-stylu for
,
- tylko
while
to sprawdza warunek w każdej pętli i nie do-while
,
- tylko
if-elif
i 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
list
typu; 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
tuple
typu,
- w przypadku map korzystasz z jedynego wbudowanego,
dict
któ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 None
zamiast tego, if not (foo is None)
ponieważ „nie jest” jest w specjalnej obudowie. Nadal foo is not None
czyta ł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 if
i 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 str
i jedyny binarny bytes
, którego nie można pomyłkowo wymieszać.
"""
komentarzach (dokumentach). Obejmują one wiele linii.__doc__
atrybut. Ale ciągi to obszar, w którym Python zdecydowanie oferuje wiele „właściwych sposobów”: użyj pojedynczego, podwójnego lub potrójnego cudzysłowu, domyślnie połącz sąsiednie literały, użyjr
surowych literałów itp.Kolejnymi przykładami są:
len()
jest funkcją zamiast metody występującej w każdej sekwencji; jeśli porównać z Java masz.length
,.size()
,.getSize()
oraz inne metody, aby znaleźć liczbę elementów w sekwencji.Innym przykładem jest fakt, że
.join()
jest tostring
metoda, a nie metoda obecna w każdej sekwencji. Nie musisz wiedzieć, czy parametr łączenia jest listą, zestawem, zrozumieniem czy czymkolwiek innym, zadziała.źródło
W C istnieje wiele możliwych sposobów zwiększenia wartości zmiennej o jeden:
Każda kończy się zwiększenie wartości
i
o1
, ale każdy jest nieco inny.W Pythonie istnieje tylko jeden sposób; po prostu dodaj jeden.
I chociaż istnieje więcej niż jeden prawidłowy sposób na zrobienie tego (np.
i = i + 1
), Robisz to samo z tymi samymi efektami ubocznymi.źródło
i = i + 1
jest przypisaniem, a nie przyrostem. W pythonie przyrostem jesti += 1
. W językach C stylu można napisaći++
,++i
ii += 1
.i += 1
, BTW) dają dokładnie taki sam wynik. Jedyny raz widzę, jak ludzie się mylą, kiedy zwiększają lub zmniejszają zmienną jako część większego wyrażenia, a to zwykle szybko naprawia się, czytając odpowiednią sekcję odnośnika językowego. Osobiście wybrałbym fakt, że możesz odwoływać się do piątego znaku struny przez jednostr[4]
lub drugie*(str+4)
, ale może to było zbyt łatwe ...max(i++, ++i)
których nie można szybko naprawić. C ma wiele „nieokreślonych” i „zależnych od implementacji” przypadków zachowania, wszystko z dobrych powodów - ale każdy może stworzyć pułapkę.Inną możliwością mogą być listy ze zrozumieniem. W Pythonie możesz to zrobić:
Ale „oczywistym” sposobem (jeśli jesteś Holendrem lub jesteś bardziej zaznajomiony z Pythonem) zrobienia tego byłoby zrozumienie listy:
Jest krótszy, nowa_lista jest tworzona w jednym kroku, wierzę, że działa szybciej, i jest elegancki. Z drugiej strony, można argumentować, że wydaje się mniej wyraźny, ale myślę, że kiedy się do tego przyzwyczaisz, jest to równie wyraźne.
źródło