Форум сайта python.su
Читая различную литературу по python, регулярно попадаются понятия литерала, инструкции и выражения. Однако четкого (однозначного) определения этих базовых понятий я не нашел. Пытаясь докопаться до истины, просмотрел много информации, выслушал множество мнений и, на удивление, понял, что не смотря на то, что эти термины являются базой и основой, многие до конца их не понимают или понимают на подсознательном уровне.
Короче, интересует мнение экспертов. Давайте дадим четкое определение этих трех понятий.
ИМХО:
Инструкции, в некоторых источниках называют опараторами statements. Определения не нашел.
К ним относятся следующие инструкции:
assert, break, class, continue, def, del, if, elif, else, try, except, exec, finally, for, from, global, import, pass, raise, return, while, yield.
В питон2 сюда входил еще print
В питон3 print() - стал функцией, однако почти во всех книгах почему-то все равно print() называют инструкцией?
Относятся ли сюда операции присваивания?
Выражения expressions. Выражение представляет собой объект.
Примеры:
1
5.0
“hello”
None, True, False
(), , {}, (1, 2, 3), , {'a':1, ‘b’:2}
______________________
однако, a = 1 #инструкция
b = 2*3 + 9**0.5 #инструкция
c = {'a':1, ‘b’:2} #инструкция
______________________
d = MyClass() #это инструкция?
e = foo() #это инструкция?
Офлайн
Определение грамматики тут:
https://docs.python.org/3/reference/grammar.html
Выражение:
expr: xor_expr ('|' xor_expr)* те это список одного или более xor_expr выражений разделенных символом ‘|’
Литералы:
atom: ('(' ‘)’ |
'[' ‘]’ |
‘{’ ‘}’ |
NAME | NUMBER | STRING+ | ‘…’ | ‘None’ | ‘True’ | ‘False’)
Терминалы NAME, NUMBER, STRING определяются уже в лексическом анализаторе а не в грамматике.
инструкции:
по смыслу это ближе всего к:
stmt: simple_stmt | compound_stmt те это простая инструкция или составная инструкция см. далее грамматику
assert, break, class и т.п. называют по русски лексемы или ключевые слова. В грамматике это все что задано строками.
т.е.
1
5.0
“hello”
это литералы, а литералы это частный случай выражений. так что да это выражения.
b = 2*3 + 9**0.5
d = MyClass()
Легко проверяется что это либо инструкции, либо элементы списка аргументов (varargslist) в зависимости от контекста.
Подробнее можно тут ознакомиться
Теория синтаксического анализа, перевода и компиляции (в 2-х томах)
https://vk.com/topic-51126445_29448465
Отредактировано doza_and (Дек. 6, 2017 23:20:05)
Офлайн