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

2024-05-15 09:54:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想尽量压缩我的代码。 为什么Python中不允许以下内容?你知道吗

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

Tags: 代码testinputstringifpasselsestop
3条回答

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要么是单个简单语句,要么是简单语句的缩进块。你知道吗

简单语句是一个带有可选分号的小语句或多个由分号分隔的小语句。所有的简单语句都以换行结束。你知道吗

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

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

实际上,一行中可以有多个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)

那你期望什么呢?这将是一个混乱的局面,因为没有人会知道一些东西是如何被解析的。你知道吗

相关问题 更多 >