在一行上添加一个简单的if-then-else语句

Abi*_*ern 782 python syntax if-statement ternary-operator

可能重复:
Python三元运算符

我刚刚进入Python,我非常喜欢语法的简洁性.然而,有没有写一个更简单的方法if- then- else语句,因此它适合在同一行?

例如:

if count == N:
    count = 0
else:
    count = N + 1
Run Code Online (Sandbox Code Playgroud)

有没有更简单的写作方式?我的意思是,在Objective-C中我会把它写成:

count = count == N ? 0 : count + 1;
Run Code Online (Sandbox Code Playgroud)

Python有类似的东西吗?

更新

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

我问的是一般语法.

cms*_*sjr 1445

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

value_when_true if condition else value_when_false
Run Code Online (Sandbox Code Playgroud)

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

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

现在使用if语法分配和对比

fruit = 'Apple'
isApple = True if fruit == 'Apple' else False
Run Code Online (Sandbox Code Playgroud)

VS

fruit = 'Apple'
isApple = False
if fruit == 'Apple' : isApple = True
Run Code Online (Sandbox Code Playgroud)

  • 在使用三元形式时,你不能省略else,它会导致语法错误,但如果在一行中你可以做一个正常的,我更新样本来说明. (9认同)
  • 请注意,简写语法仅对实际值有效.您可以将它与常量和函数一起使用(如果是水果='''Apple',则打印('No Apple')`),但不能使用关键字(如果水果='''Apple',则可以使用'是'否则提高异常( '没有Apple')`) (8认同)
  • 通过将此方法与使用多行 if 语句的相同事物进行对比,可以使此答案受益。 (4认同)
  • 我不清楚我是否可以省略其他情况,如果水果=='Apple',我可以选择'是'吗? (3认同)
  • 这非常像理解。你可以这样做:`print('matched!' if re.match(r'\d{4,}', '0aa9') else "nopes")`(假设你导入re) (2认同)
  • 为什么不这样做: isApple = Fruit == 'Apple' (2认同)

小智 161

此外,您仍然可以使用"普通" if语法并将其与冒号分隔成一行.

if i > 3: print("We are done.")
Run Code Online (Sandbox Code Playgroud)

要么

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

  • 问题包括"其他"条件 (31认同)
  • PEP8不是神圣的令状.如果你的程序使用这种语法会更好,那很好. (10认同)
  • 有人可以解释为什么这不是最好的答案吗?它绝对是最容易阅读的恕我直言. (6认同)
  • 那真是怪了.以下是[PEP8](http://legacy.python.org/dev/peps/pep-0008/#code-lay-out)中的特定"是"示例.`是:如果x == 4:打印x,y; x,y = y,x`我想,你知道,大地精和诸如此类的东西. (6认同)
  • @ johannes-braunias您的方法违反PEP8标准. (4认同)
  • 从[PEP8](http://legacy.python.org/dev/peps/pep-0008/):通常不鼓励使用复合语句(同一行上的多个语句). (3认同)
  • 复合语句不会在没有一行之后在 shell 中运行。使用额外的线路,您不妨将它们分开。 (2认同)

Tim*_*ker 123

count = 0 if count == N else N+1
Run Code Online (Sandbox Code Playgroud)

- 三元运算符.虽然我说你的解决方案比这更具可读性.


msh*_*yem 98

一般三元语法:

value_true if <test> else value_false
Run Code Online (Sandbox Code Playgroud)

另一种方式可以是:

[value_false, value_true][<test>]
Run Code Online (Sandbox Code Playgroud)

例如:

count = [0,N+1][count==N]
Run Code Online (Sandbox Code Playgroud)

这会在选择之前评估两个分支.仅评估所选分支:

[lambda: value_false, lambda: value_true][<test>]()
Run Code Online (Sandbox Code Playgroud)

例如:

count = [lambda:0, lambda:N+1][count==N]()
Run Code Online (Sandbox Code Playgroud)

  • 但是,无论两个值都计算在哪,[<test>]是什么? (11认同)
  • @msw:保证`False == 0`和`True == 1`:这里没有实现细节.:)请参阅http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy下的"布尔"标题 (7认同)
  • 这依赖于一个实现细节,`(False,True)==(0,1)`我不知道是保证(但没有检查).虽然简洁,但它不会赢得任何可读性奖项.您也可以在C中执行"abcdefg"[i]`,但这并不意味着您应该这样做. (2认同)

pho*_*x24 20

<execute-test-successful-condition> if <test> else <execute-test-fail-condition>
Run Code Online (Sandbox Code Playgroud)

它会变成你的代码片段,

count = 0 if count == N else N + 1
Run Code Online (Sandbox Code Playgroud)