Почему класс и функция не могут быть определены в одной строке? - PullRequest
0 голосов
/ 15 января 2019

По какой-то причине невозможно определить метод, подобный этому:

class X:def y():pass #Results in a SyntaxError

но вы можете определить метод и содержимое в одной строке:

def y():print("It works!")

Почему будет работать второй пример, а не первый?

1 Ответ

0 голосов
/ 15 января 2019

Для составного оператора, состоящего из одной строки, тело должно быть простым оператором или разделенным точкой с запятой списком простых операторов :

suite         ::=  stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement     ::=  stmt_list NEWLINE | compound_stmt
stmt_list     ::=  simple_stmt (";" simple_stmt)* [";"]

Это не может быть сложным утверждением. Это открыло бы дверь к слишком запутанному и неоднозначному синтаксису. Например,

if True: if False: pass
else: print('Which "if" does this "else" go with?')
...