Синтаксис Python объясняется в справочнике по языку.Соответствующие части:
7.7 Определения функций
...
funcdef ::= "def" funcname "(" [parameter_list] ")" ":" suite
...
Итак, синтаксис для функции - это все, что нужно до двоеточия, за которым следует suite
.
7.Составные операторы
...
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
...
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
...
Таким образом, suite
может быть либо stmt_list
, либо блоком с отступом, содержащим хотя бы один statement
... А stmt_list
- это просто наборsimple_stmt
чанки, соединенные точкой с запятой в одной строке.
Наконец:
6.Простые утверждения
simple_stmt ::= expression_stmt
| assert_stmt
...
Это показывает, что simple_statement
может быть любым выражением, или assert
, или любым другим, что было в списке.
Вы можете нажимать ссылкина этих страницах, чтобы исследовать дальше.expression_stmt
- это просто любое выражение, вычисляемое само по себе, например:
dir
2
"cat"
int()
. Это совершенно правильная программа на Python, которая будет анализировать и запускать, даже если она ничего не делает.
ФункцияСтрока документа также является выражением.Это просто строка, которая обрабатывается системой специально.
Однако специальная обработка не является частью синтаксиса.Это происходит на другом этапе, долгое время после того, как синтаксический анализатор построил свое абстрактное синтаксическое дерево.
Я бы искал в другом месте проблему с памятью ...:)