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

2024-04-26 22:05:09 发布

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

一个简单的问题。首先,我注意到在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())

当然,这是行不通的。不过,希望它能让我更清楚地知道我到底想做什么。除了“你不应该这样做”之外,任何想法都会被感激的

在我得到你们所有的纯粹主义者蜂拥而至,鼓吹这不是Pythonic或者别的什么之前,是的,我知道这不是用Python编写代码的最佳方式。把它当作一个研究问题。我只想知道我要找的东西是否可行。你知道吗


Tags: 代码forifsome语句constructcondition事情
3条回答

在某些情况下,您可以:

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)类似 else(3如果b==4)#如果a!=7,但b=4 否则0#都是假的 但它令人困惑,通常是一个坏主意,违反了python的禅。你知道吗

在一行上放多个冒号是不可能的。你知道吗

不管怎样,PEP8建议始终在冒号后面加新行。在大多数情况下,最好遵循这个准则。你知道吗

正如@suvenpandey所指出的,if语句可以使用嵌套的三元运算符嵌套在一行中,但请不要在一行中使用多个。在这一点上,代码是极其丑陋和不可读的。你知道吗

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

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

相关问题 更多 >