По какой-то причине невозможно определить метод, подобный этому:
class X:def y():pass #Results in a SyntaxError
но вы можете определить метод и содержимое в одной строке:
def y():print("It works!")
Почему будет работать второй пример, а не первый?
Для составного оператора, состоящего из одной строки, тело должно быть простым оператором или разделенным точкой с запятой списком простых операторов :
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?')