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

例如:

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

有没有更简单的写法?我的意思是,在Objective-C中我会这样写:

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

Python也有类似的东西吗?

更新

我知道在这种情况下,我可以使用count == (count + 1) % N。

我问的是一般语法。


当前回答

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

value_when_true if condition else value_when_false

更好的例子:(谢谢Burns先生)

“是”如果水果==“苹果”否则“否”

现在是赋值和对比if语法

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

vs

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True

其他回答

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

-三元运算符。不过我得说你的解决方案比这个更有可读性。

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

value_when_true if condition else value_when_false

更好的例子:(谢谢Burns先生)

“是”如果水果==“苹果”否则“否”

现在是赋值和对比if语法

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

vs

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True

此外,您仍然可以使用“普通”if语法,并将其合并到带有冒号的一行中。

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

or

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

一般三元语法:

value_true if <test> else value_false

另一种方式是:

[value_false, value_true][<test>]

e.g:

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

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

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

例如:

count = [lambda:0, lambda:N+1][count==N]()
<execute-test-successful-condition> if <test> else <execute-test-fail-condition>

你的代码片段会变成,

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