如果我有一些代码:
x = foo ? 1 : 2
我应该如何将其翻译为Python?我可以这样做吗?
if foo:
x = 1
else:
x = 2
x还会在if / then块之外的范围内吗?或者我必须做这样的事情吗?
x = None
if foo:
x = 1
else:
x = 2
答案 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)
答案 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:)