代码之家  ›  专栏  ›  技术社区  ›  Picachieu

为什么不能在同一行定义类和函数?

  •  1
  • Picachieu  · 技术社区  · 6 年前

    由于某种原因,不可能定义这样的方法:

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

    但您可以在同一行中定义方法和内容:

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

    为什么第二个例子有效,而不是第一个?

    1 回复  |  直到 6 年前
        1
  •  6
  •   user2357112    6 年前

    对于一行复合语句,正文必须是 a simple statement, or a semicolon-separated list of simple statements :

    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?')