To jest naprawdę tylko teoretyczne pytanie pytającego początkującego, który chce zrozumieć więcej.
Wciąż zapominam dwukropek po początkowych instrukcjach bloku w pythonie. Oto, co mam na myśli:
for <variable> in <sequence>:
if <blah blah>:
Myślę, że jednym z powodów, o których ciągle zapominam, jest fakt, że są one w rzeczywistości ukryte: dwukropek czy nie, oświadczenie kończy się tą linią.
Moje pytanie - które zadaję, aby dowiedzieć się, jak działa składnia Pythona - brzmi: czy dwukropek jest naprawdę niepotrzebny? Czy miałbym zmienić składnię Pythona, aby dwukropek nie był już potrzebny, czy coś się zepsuje? Czy spowodowałoby to, że niektóre stwierdzenia byłyby dwuznaczne lub niemożliwe?
if
,else
,while
i tak dalej. Gdybyś to zrobił, czy Python nadal byłby językiem, którego można używać bez dwuznaczności?if .. then .. end
w jednym wierszu. Więc tutaj w pythoniethen
zastąpiono dwie rzeczy:
ai wymaganą nową linię. Jeden z nich wydaje się zbędny.Odpowiedzi:
Tak, dwukropek jest wymagany do ujednoznacznienia niektórych konstrukcji. Rozważmy na przykład
if x - y < z: pass
. Bez dwukropka nie możemy zdecydować, jak to przeanalizować, nie znając kontekstu, czym są x, y i z.if x: -y < z...
jest poprawny, jeśli x ma wartość logiczną, wif x - y < z:
przeciwnym razie jest poprawny.Ponieważ bardzo dobrym pomysłem jest, aby język programowania nie wymagał wykonywania aplikacji do momentu kompilacji, aby móc go przeanalizować, dwukropek jest bardzo wymagany. Możesz to upuścić, ale potrzebujesz innych sposobów na ujednoznacznienie.
źródło
if condition: print("Condition passed")\n
dozwolone?\n
Symbolizuje nową linię po instrukcji print.Dwukropek nie jest tak naprawdę konieczny gramatycznie, gdyby Python został zaprojektowany w innym świecie, możliwe jest, że projektant języka nie zdecyduje się wymagać dwukropka. I rzeczywiście, języki takie jak Cobra to robią.
Głównym powodem, dla którego dwukropek jest wymagany w pythonie, jest jego czytelność. Cytat z Python FAQ :
Jak wspomniano również w często zadawanych pytaniach, dwukropek ułatwia także przetwarzanie kodu Pythona bez pełnego parsowania języka. Dowolny procesor tekstowy z pełnoprawnym analizatorem składni, w tym kompilator Pythona, może obejść się bez dwukropka, jeśli nie byłby wymagany lub jeśli stał się opcjonalny, gdy był jednoznaczny.
źródło
Nie jest to konieczne dla komputera, ale dla ludzi.
Guido van Rossum (twórca Pythona) prowadził przez pewien czas blog o historii Pythona. Okrężnica została wprowadzona w ABC , źródle wielu funkcji Pythona.
W tym poście na blogu „Karin Dewar, Wcięcie i dwukropek” Guido pisze:
( B tutaj to seria prototypowych języków B0, B1, ... które doprowadziły do ABC. To nie język B jest poprzednikiem C).
Pamiętam też Guido, który w latach 90. zwrócił uwagę, że to z korzyścią dla redaktorów , którzy mogą automatycznie wstawić wcięcie po linii kończącej się dwukropkiem. Ale nie znalazłem jeszcze źródła tego.
źródło
Cobra język programowania jest składnia jest mocno inspirowana przez Pythona, a to eliminuje okrężnicy, więc wydaje się, że nie jest to bezwzględnie konieczne. Jednak nie wystarczy po prostu usunąć ten dwukropek, istnieją inne zmiany w składni potrzebne. Zobacz na przykład ten fragment kodu z jednego z moich projektów zabawek :
Bez dwukropka oddzielającego ciało od listy parametrów musiałbym użyć wcięcia:
Wierzę, że wcześniejsze wersje Cobry włączały dwukropek jako opcjonalny, można użyć wcięcia, dwukropka lub obu. Podobnie jak w Ruby, gdzie istnieją słowa kluczowe do oddzielenia różnych części wyrażeń kontrolnych, ale można także użyć separatorów wyrażeń (średnik lub nowa linia):
W aktualnych wersjach Cobry możesz użyć przecinka:
można zapisać jako
W przeglądarce musi być jakiś sposób na oddzielenie różnych części wyrażeń kontrolnych lub definicji. W Pythonie jest to dwukropek. Jeśli usuniesz dwukropek, musisz go zastąpić czymś innym, np. Wymuszonym wcięciem. Tylko usunięcie jelita grubego nie będzie działać.
Jedynym sposobem, aby być absolutnie pewnym, jest sformalizowanie składni z dwukropkiem i bez niego oraz udowodnienie jego niejednoznaczności.
Zauważ jednak, że jednym z aforyzmów Zen Pythona jest: „Jawne jest lepsze niż niejawne”, więc wyraźne określenie bloków dwukropkami wydaje się pasować do ogólnej filozofii Pythona. Projektowanie i Historia FAQ wspomina również, że decyzja ta jest oparta na dowodach empirycznych od poprzednika Pythona, ABC.
źródło