如何在Python中嵌套单行语句?

时间:2019-04-25 01:59:09

标签: python syntax nested

一个简单的问题。首先,我注意到在Python中,我可以通过更改以下简短语句来使事情更简洁:

if some_condition:
    do_something()

对此:

if some_condition: do_something()

当然,仅当if语句中的代码仅由一行组成时,此更改才有效。

但是,如果有多个嵌套的“ construct”(我指的是诸如if-else,for,while或try-except语句之类的东西),则会出现语法错误。例如,我无法更改:

if some_condition:
    if other_condition:
        do_something()

对此:

if some_condition: if other_condition: do_something()

甚至是这样:

if some_condition: if other_condition:
    do_something()

但这确实可行:

if some_condition:
    if other_condition: do_something()

我的猜测是,这样做的原因是,在同一行上具有两个构造会产生某种歧义。我想知道是否仍然可以通过某种方式将两个语句放在一行上,但是仍然可以工作。例如,也许与此类似:

if some_condition: (if other_condition: do_something())

那当然是行不通的。但是,希望它可以使我更加清楚地知道我在此尝试做什么。除了“您不应该这样做”以外的任何想法都将受到赞赏。

在我吸引所有纯粹主义者涌入并宣讲这不是Python或其他东西之前,是的,我知道这不是用Python编写代码的最佳方法。认为这是一个研究问题。我只想知道我要寻找的东西是否可能。

4 个答案:

答案 0 :(得分:1)

不可能将多个冒号放在一行上。

无论如何,PEP8建议始终在冒号后面加上新行。在大多数情况下,最好遵循此准则。

正如@Suven Pandey所指出的那样,if语句可以使用嵌套的三元运算符嵌套在一行上,但是请不要在一行上使用多个语句。到那时,该代码非常丑陋且不可读。

答案 1 :(得分:0)

在某些情况下,您可以这样做:

a = 7
b = 4
print(a) if a == 7 else 3 if b ==4 else 0 #print a 
print(a) if a == 27 else 3 if b ==4 else 0 #print 3
print(a) if a == 27 else 3 if b ==44 else 0 #print 0

如果a == 7,这类似于print(a)  否则(3如果b == 4)#如果a!= 7但b = 4  否则0#均为假 但它令人困惑,通常是一个坏主意,并且违反了zen python。

答案 2 :(得分:0)

只要您在要执行的字符串中提供正确的换行符和制表符组合,就可以使用exec函数在一行上合并嵌套构造。

exec ('a=7\nif a>3:\n\tfor x in range(a):\n\t\tif x != 5:\n\t\t\tprint("Wow!")')

答案 3 :(得分:0)

问题是如何绕过它,但我想知道为什么同一行上的多个冒号是禁止的。 O.P. 猜测歧义,而 docs mention 猜测:

if x: if y: foo() else: bar()

可能意味着

if x: 
    if y: 
        foo()
else: 
    bar()

if x: 
    if y: 
        foo()
    else: 
        bar()