python:将一个简单的if-then-else语句放在一行上

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Python Ternary Operator

我刚刚开始学习Python,我非常喜欢它简洁的语法。然而,是否有一种更简单的方法来编写if-then-else语句,使其适合一行呢?

例如:

1
2
3
4
if count == N:
    count = 0
else:
    count = N + 1

有更简单的写法吗?我的意思是,在Objective-C中,我可以这样写

1
count = count == N ? 0 : count + 1;

Python也有类似的东西吗?

更新

我知道在这个例子中我可以使用count == (count + 1) % N

我问的是一般语法。


这是一个更具体的三元运算符表达式,而不是if-then,这是python语法

1
value_when_true if condition else value_when_false

更好的例子:(谢谢伯恩斯先生)

'Yes' if fruit == 'Apple' else 'No'

现在来看赋值和if语法的对比

1
2
fruit = 'Apple'
isApple = True if fruit == 'Apple' else False

vs

1
2
3
fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True


此外,您仍然可以使用"普通"if语法,并将其合并为一行,并使用冒号。

1
if i > 3: print("We are done.")

1
2
field_plural = None
if field_plural is not None: print("insert into testtable(plural) '{0}'".format(field_plural))


1
count = 0 if count == N else N+1

-三元运算符。尽管我想说你的解决方案比这个更容易读。


一般三元语法:

1
value_true if <test> else value_false

另一种方法是:

1
[value_false, value_true][<test>]

例句:

1
count = [0,N+1][count==N]

这将在选择一个分支之前评估两个分支。只评估所选的分行:

1
[lambda: value_false, lambda: value_true][<test>]()

例如:

1
count = [lambda:0, lambda:N+1][count==N]()


1
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

你的代码片段会变成,

1
count = 0 if count == N else N + 1