在Python中替换三元运算符的最佳方法是什么?

时间:2009-03-13 18:23:06

标签: python

  

可能重复:
  Ternary conditional operator in Python

如果我有一些代码:

x = foo ? 1 : 2

我应该如何将其翻译为Python?我可以这样做吗?

if foo:
  x = 1
else:
  x = 2

x还会在if / then块之外的范围内吗?或者我必须做这样的事情吗?

x = None
if foo:
  x = 1
else:
  x = 2

6 个答案:

答案 0 :(得分:28)

在Python 2.5 +中使用三元运算符(正式conditional expression)。

x = 1 if foo else 2

答案 1 :(得分:5)

Ternary运算符mentioned仅适用于Python 2.5。来自WeekeePeedeea

  

虽然已经推迟了几次   多年来,语法上存在分歧,a   Python的三元运算符是   被批准为Python Enhancement   提案308并被添加到2.5   2006年9月发布。

     

Python的三元运算符不同于   常见的?:运算符的顺序   它的操作数;一般形式是op1 if condition else op2。这个表格   邀请将op1视为正常   值和op2作为例外情况。

     

在2.5之前,人们可以使用丑陋的   语法(lambda x:op2,lambda x:op1)[condition]()也需要   只关心评估表达式   这实际上是需要的   防止副作用。

答案 2 :(得分:2)

我仍然在我的一个项目中使用2.4并且已经遇到过几次这样的事情。我看到的最优雅的解决方案是:

x = {True: 1, False: 2}[foo is not None]

我喜欢这个,因为它代表了比使用索引值为0和1的列表获得返回值更明确的布尔测试。

答案 3 :(得分:1)

重复this one.

我使用这个(虽然我正在等待有人下注或评论,如果它不正确):

x = foo and 1 or 2

答案 4 :(得分:0)

您可以使用以下内容:

val = float(raw_input("Age: "))
status = ("working","retired")[val>65]
print "You should be",status

虽然它不是非常 pythonic

(其他选项更接近于C / PERL,但这涉及更多的元组魔法)

答案 5 :(得分:-1)

一个不错的python技巧是使用它:

foo = ["ifFalse","ifTrue"][booleanCondition]

它创建一个2元列表,布尔值变为0(假)或1(真),它选择正确的成员。 不太可读,但是pythony:)