在Python

时间:2016-10-29 08:14:03

标签: python

我正在寻找缩短正常if else陈述的方法。 我找到的格式之一是改变这个:

if x == 1:
    print("Yes")
else:
    print("No")

进入这个:

print("Yes") if x == 1 else print("No")

上面的代码是pythonic吗?否则,什么是缩短if else语句的pythonic方法?

我也尝试使用return代替print。我试过了

return total if x == 1 else return half

导致第二个return无法访问的语句。有没有办法让我无法看到?

最后,我尝试使用else if代替else代码,但这也不会有效。

print(total) if x == 1 else print(half) if x == 2

上面的代码可能看起来很愚蠢。我错过了正确的格式,或者是否真的无法使用此格式执行returnelse if

3 个答案:

答案 0 :(得分:3)

您是否尝试在打印本身中使用三元组?

print("Yes" if x == 1 else "No")

答案 1 :(得分:3)

表格

print("Yes") if x == 1 else print("No")

通常不被认为是Pythonic,因为... if ... else ...是一个表达式,并且你丢弃了表达式产生的值(总是None)。你可以使用Pythonic print("Yes" if x == 1 else "No"),因为条件表达式的值被用作print的参数。

表格

return total if x == 1 else return half

无法工作,因为return是一个语句,必须出现在逻辑行的开头。相反,使用

return total if x == 1 else half

(解析与return (total if x == 1 else half)相同)。

代码

 print(total) if x == 1 else print(half) if x == 2

也不起作用 - 条件表达式为... if ... else ...,即每个if必须与其后的else配对;你的第二个if缺少else条款;你可以用

 print(total) if x == 1 else print(half) if x == 2 else print('something else')

同样,这不会被认为是非常pythonic;但你可以使用

 print(total if x == 1 else half if x == 2 else 'something else')

并不是说它会好得多。

最后,如果您正在参加代码高尔夫

print("Yes" if x == 1 else "No")

可以缩短为

print(('No', 'Yes')[x == 1])

使用True == 1False == 0这一事实并使用它们来索引元组。

答案 2 :(得分:1)

三元if..else表达式进行操作。 return是一个陈述,而不是表达。 print()是一个表达式,但请注意你写两次的方式 - 你打印不管;它只是您想要打印的表达式可能会有所不同。

print("Yes") if x == 1 else print("No")

以上是有效的,但您不需要对同一个函数有两个引用:

print("Yes" if x == 1 else "No")

以下内容无效,因为您有多个语句:

return total if x == 1 else return half

再次,对你想要使用的表达式进行操作:

return total if x == 1 else half

现在,三元就是那个 - 三元。它应该有三个部分,而不是四部分。

print(total) if x == 1 else print(half) if x == 2

在上面,你有四个表达式:

  • print(total)
  • x == 1
  • print(half)
  • x == 2

那太多了。你可以让其中一个表达式本身是一个更大的表达式,尽管它总是需要一个else(三元组):

print(total if x == 1 else half if x == 2 else 'Neither 1 nor 2.')

使用更多括号显示分组:

print(total if x == 1 else (half if x == 2 else 'Neither 1 nor 2.'))

上面内括号中的表达式是一个带有三元运算符本身的表达式,以及带有三元运算符的较大表达式中的表达式。