一行编写if语句

时间:2018-09-28 14:11:10

标签: python-3.x if-statement printing

以下语句正确无误:

print( "10 is greater than 5" ) if 10>5 else print( "nothing here " )

删除else会导致错误SyntaxError: unexpected EOF while parsing

print( "10 is greater than 5" ) if 10>5

为什么会这样?

5 个答案:

答案 0 :(得分:6)

print是一个函数,它采用单个值。换句话说,您需要一次调用print,并表示其作为在线用户if的值:

print ("10 is greater than 5" if 10 > 5 else "nothing here")

答案 1 :(得分:4)

或者您可以写

print("10 is greater than 5" if 10>5 else "nothing here ")

答案 2 :(得分:2)

您需要在打印语句中使用括号

print("10 is greater than 5") if 10>5 else print("nothing here ")

答案 3 :(得分:2)

根据您的python版本,您在打印调用中缺少(或包括)括号。

对于Python 2.7.x,您可以执行以下操作:

print "10 is greater than 5" if 10 > 5 else "nothing here"

对于Python 3.x,您可以执行以下操作:

print("10 is greater than 5") if 10 > 5 else print("nothing here")

答案 4 :(得分:1)

如果您希望if语句成为一个衬里:

if 10>5: print( "10 is greater than 5" ) 

编辑:

我们可以通过以下方式对系统进行入侵来逆转行为和状况:

(lambda: None, lambda: print("10 is greater than 5"))[10>5]()

EDIT2:

关于原因的小解释。

..如果.. else是Python人们的发明,以Python语言引入三元运算符。传统上这是条件?行动:行动。但是,在Python哲学中,我们希望使事情变得明确,因此..if..else使用了冗长的方法。此外,这是一个运算符,因此可以在赋值中使用,以将多个值组合为一个可以赋值的值。像a = b + c中一样,+是一个求和运算符,将b和c相加,并将结果分配给c。同样,.if..else是运算符,它们在三个不同的值上工作并分配给某些东西。这就是为什么它被称为三元运算符。 +被称为二进制运算符。

但是,您可以将函数放在运算符之间,而不是将值放在运算符上,这些函数将在Python解释器尝试要求它们时执行。 (就像您可以执行a = sum(numbers) + 10一样。Python期望有一个值的地方有一个函数(sum),因此它执行函数sum来获得该值。因此,实际上Python只是对获取打印功能的值(无)感兴趣,并将其分配给它不能分配的值。打印更多是副作用。)

if ..:..但是不是操作员,而是控制流程工具。这意味着它可以在if语句之后执行 block 代码。此外,我可以在此代码语句块中输入内容,例如分配。但是,当然,该块可以是单个功能。

举一些例子:

x = 1 if y > 5 else x = 10

以上内容是不允许的,因为Python希望处理值并获取语句(赋值)。而是使用:

x = 1 if y > 5 else 10

但是使用控制流工具if,我们可以提供以下语句:

if y > 5: x = 1

走得更远。在Python2中打印不是一个函数。

因此,尽管它看起来像是一个函数,并且在Python3中是正确且有效的代码,但它甚至在Python2中也不起作用:

print("this") if True else print("that") # does not work in Python2!