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

为什么Python中的多个复合语句不能在一行中?

  •  -1
  • GeeTransit  · 技术社区  · 6 年前

    我想尽量压缩我的代码。

    string = input()
    if string.isnumeric: pass
    else: if string == 'tesr': print('test') else: print('stop')
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   Prune    6 年前

    在这种特殊情况下,问题是Python使用缩进来确定块包含。查找“悬空的其他”问题。有些语言使用大括号或其他“可见”标点符号;Python在新行的开头使用空格。没有这些新台词,你就没有合法的 if

        2
  •  0
  •   Patrick Haugh    6 年前

    grammar ,你在找

    if_stmt: 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
    suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
    simple_stmt: small_stmt (';' small_stmt)* [';'] NEWLINE
    

    (我重新排列了这些)。所以 if 语句具有 suite ,如果 test 一套 不是单个简单语句,就是简单语句的缩进块。

    简单的语句以换行结束。

    如果你是在寻找设计意义上的原因,我只能猜测。这可能会使编写语法变得更简单,而且设计者可能会认为在您的示例中这样限制代码是一种好处。

        3
  •  0
  •   quant    6 年前

    实际上,一行中可以有多个if语句。例如你的代码

    string = input()
    if string.isnumeric: pass
    else: if string == 'tesr': print('test') else: print('stop')
    

    可以写成一行字。

    if not string.isnumeric(): print('test') if (string == 'tesr') else print('stop')
    

    None if string.isnumeric() else print('test') if (string == 'tesr') else print('stop')
    

    不过,我同意@timgeb在评论中的观点——可读性才是最重要的!

    编辑

    if x == 1: print(1) if x == 3: print(2) else: print(3)
    

    ? 你可以认为这段代码

    if x == 1: print(1)
    if x == 3: print(2)
    else: print(3)
    

    if x == 1:
        print(1)
        if x == 3: print(2)
    else: print(3)