Это действительно теоретический вопрос новичка-питона, который хочет понять больше.
Я продолжаю забывать двоеточие после блока начальных операторов в python. Вот что я имею в виду:
for <variable> in <sequence>:
if <blah blah>:
Я думаю, что одна из причин, которые я продолжаю подделывать, состоит в том, что они де-факто неявны: двоеточие или нет, утверждение заканчивается на этой строке.
Мой вопрос - который я задаю, чтобы узнать, как работает синтаксис Python, - действительно ли двоеточие не нужно? Если бы я изменил синтаксис python, чтобы двоеточие больше не было нужно, что-нибудь сломалось бы? Это сделало бы некоторые заявления двусмысленными или невозможными?
if
,else
,while
и так далее. Если бы вы сделали это, станет ли python языком, который можно использовать без двусмысленности?if .. then .. end
в одну строку. Таким образом, здесь в pythonthen
заменены две вещи:
и обязательный перевод строки. Один из них кажется излишним.Ответы:
Да, двоеточие требуется для устранения неоднозначности определенных конструкций. Рассмотрим, к примеру
if x - y < z: pass
,. Без двоеточия мы не можем решить, как разобрать это, не зная контекста того, что такое x, y и z.if x: -y < z...
действителен, если x является логическим значением,if x - y < z:
действителен в противном случае.Поскольку для языка программирования очень хорошая идея не требовать от вас выполнения приложения вплоть до того момента, когда вы его компилируете, чтобы иметь возможность его анализировать, двоеточие очень необходимо. Вы можете отказаться от него, но вам понадобятся другие способы устранения неоднозначности.
источник
if condition: print("Condition passed")\n
разрешено?\n
Символизирует новую строку после заявления печати.Двоеточие на самом деле не нужно грамматически, если бы Python был разработан в другом мире, вполне возможно, что разработчик языка не решит потребовать двоеточие. И действительно, такие языки, как Cobra, делают это.
Основная причина, почему двоеточие требуется в python, - читаемость человеком. Цитировать из Python FAQ :
Как также упоминалось в FAQ, двоеточие также облегчает обработку кода Python без полного синтаксического анализа языка. Любой текстовый процессор, имеющий полноценный парсер, включая компилятор python, может обойтись без двоеточия, если это не требуется или если он сделан необязательным, когда однозначно.
источник
Это не обязательно для компьютера, но для людей.
Гвидо ван Россум (создатель Python) некоторое время вел блог истории Python. Двоеточие было введено в ABC , источнике многих возможностей Python.
В этом сообщении в блоге «Карин Дьюар, Отступ и Колон» Гвидо пишет:
( B - это серия языков-прототипов B0, B1, ..., которые привели к ABC. Это не язык B, который является предшественником C).
Я также помню, как Гвидо в 90-х годах указывал, что это было на пользу редакторам , которые могут автоматически вставлять отступ после строки, заканчивающейся двоеточием. Но я еще не нашел источник для этого.
источник
Cobra Язык программирования «s синтаксис сильно вдохновлен языка Python, и это делает прочь с двоеточием, так что кажется , что это не является строго необходимым. Тем не менее, недостаточно просто удалить двоеточие, необходимы другие изменения в синтаксисе. Посмотрите, например, этот кусок кода из одного из моих игрушечных проектов :
Без двоеточия, чтобы отделить тело от списка параметров, мне пришлось бы использовать отступ:
Я полагаю, что более ранние версии Cobra делали двоеточие необязательным, вы можете использовать отступ или двоеточие или оба. Аналогично тому, как это работает в Ruby, где есть ключевые слова для разделения различных частей управляющих выражений, но вы также можете использовать разделители выражений (точка с запятой или новая строка):
В текущих версиях Cobra вы можете использовать запятую:
можно записать как
Вам нужен какой-то способ разделения различных частей управляющих выражений или определений. В Python это двоеточие. Если вы удалите двоеточие, вам нужно заменить его чем-то другим, например, принудительным отступом. Только удаление толстой кишки не сработает.
Единственный способ быть абсолютно уверенным - это формализовать синтаксис с двоеточием и без него и доказать его не двусмысленность.
Обратите внимание, однако, что один из афоризмов дзен Python - «Явное лучше, чем неявное», поэтому явное разграничение блоков с двоеточиями, кажется, соответствует общей философии Python. В FAQ по дизайну и истории также упоминается, что это решение основано на эмпирических данных предшественника Python, ABC.
источник