Почему в Python нельзя использовать цикл с запятой до цикла?

Я могу присоединяться к строкам в Python, используя полуточку, например

a=5; b=10

Но почему я не могу сделать то же самое для

x=['a','b']; for i,j in enumerate(x): print(i,":", j)

Ответ 1

Короткий (но действительный) ответ просто "потому что язык grammar не определен, чтобы разрешить его". Что касается того, почему это так, трудно, если не невозможно, быть уверенным, если вы не спросите, кто бы ни придумал эту часть грамматики, но я предполагаю, что это связано с читабельностью, что является одной из целей Python 1.

Зачем вам когда-нибудь писать что-то неясное? Просто разделите его на несколько строк:

x = ['a','b']
for i,j in enumerate(x):
    print(i, ":", j)

Я бы сказал, что этот вариант намного яснее.


1 Из import this: количество читаемости.

Ответ 2

Потому что грамматика Python запрещает это. См. документацию:

stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]

Точки с запятой могут использоваться только для разделения простых операторов (а не составных операторов типа for). И, действительно, почти нет причин использовать их даже для этого. Просто используйте отдельные строки. Python не предназначен для удобного заклинивания большого количества кода на одну строку.

Ответ 3

Поскольку Guido van Rossum, создатель Python и других разработчиков, на самом деле не нравится стиль форматирования кода с запятой и фигурными скобками.

Для краткого изучения того, как они относятся к этим вещам, попробуйте:

from __future__ import braces

Заявления в Python должны быть разделены пустыми строками, а составные выражения в Python должны быть ограничены отступом.

Существование ; и однострочных составных операторов (например, for i in x: print i) предназначено только для очень ограниченных концессий... и вы не можете их комбинировать.

Ответ 4

Грамматика Python не позволяет этого. Это хороший ответ, но какая причина для этого?

Я думаю, что логика решения такова: тело цикла for должно быть отступом, чтобы быть распознанным. Таким образом, если мы допустим не simple_stmt, для этого потребуется сложный и простой отрыв.

Ответ 5

Составной оператор состоит из одного или нескольких "предложений". Предложение состоит из заголовка и набора. Заголовки предложений конкретного составного оператора находятся на одинаковом уровне отступов. Каждый заголовок статьи начинается с уникально идентифицирующего ключевого слова и заканчивается двоеточием. Набор представляет собой группу операторов, контролируемых условием. Набор может представлять собой один или несколько простых операторов, разделенных точкой с запятой, в той же строке, что и заголовок, после двоеточия заголовков, или это может быть один или несколько отступов в последующих строках.

x=['a','b'];

Это не оправдывает определение предложения и поэтому не может использоваться как составная часть составного оператора. Поэтому вы сталкиваетесь с ошибкой.