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

时间:2018-11-12 20:59:34

标签: python if-statement

我想尽可能地压缩我的代码。 为什么在Python中不允许以下内容?

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

3 个答案:

答案 0 :(得分:2)

在这种特殊情况下,问题在于Python使用缩进来确定块包含。查找“悬而未决”的问题。某些语言使用花括号或其他“可见”标点。 Python在新行的开头使用空格。没有这些新行,您就不可能在所有情况下都拥有合法的if

答案 1 :(得分:0)

实际上,一行中可以有多个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-可读性至关重要!

编辑

由于您将问题的编辑范围从“为什么我不能单写下面的代码”更改为“我想尽可能地压缩我的代码。为什么Python中不允许以下代码?” ...因为缩进对于python很重要,所以您认为下面的代码会做什么:

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)

那么您期望什么?这将是混乱的,因为没人会再知道如何解析某些内容。

答案 2 :(得分:0)

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为真,这就是执行的部分。 suite可以是单个简单语句,也可以是简单语句的缩进块。

简单语句是一个带有可选分号的小语句,或者是许多用分号分隔的小语句。 所有简单语句以换行符结尾。

如果您正在寻找设计意义上的原因,我只能推测。这可能使编写语法变得更加简单,并且设计人员可能会看到示例中的限制代码会有所帮助。