一个简单的问题。首先,我注意到在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编写代码的最佳方法。认为这是一个研究问题。我只想知道我要寻找的东西是否可能。
答案 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()