首页 > 解决方案 > 为什么这些速记不能相互配合?

问题描述

我想知道如何利用 if-else 的速记符号和+=Python 中这个简单的表达式:

我试图在任何地方设置括号并更改+=*=当然并没有改变情况。

这按预期工作:

a, b = 0, True
for i in range(123):
     if b == True:
          a = a + 1

仍然按预期工作,尝试 if-else 的简写导致我:

a, b = 0, True
for i in range(123):
     a = a + 1 if b == True else a

最后尝试写:

a, b = 0, True
for i in range(123):
     a += 1 if b == True else a:

失败了,令人惊讶的是,我很快就得到了巨大的整数a

此外,我真的很喜欢一些人手不足的东西,例如:

a, b = 0, True
for i in range(123):
     a += 1 if b

for 循环需要保持原样,因为在我的情况下,还有其他操作会影响b.

标签: python

解决方案


由于似乎没有人发帖,为什么会这样,这是我的 - 行:

a = a + 1 if b == True else a
a += 1 if b == True else a

被python视为:

a = (a + 1 if b == True else a)
a += (1 if b == True else a)

这就是为什么您在第二个版本中快速获得大量数字的原因——您将在a何时a添加。如果你想保留,然后去:bFalseif

a += (1 if b else 0)

也不要比较bTrue或者False), go fo如果是b`,因为它更pythonic(它会防止一些奇怪的错误,当其他代码开始与你的交互时)。

编辑:为更短的代码寻找@Tomerikoo 的答案,但请记住,这些水域可能是浑浊的,并不是每个人都知道/很容易遵循,将布尔值添加到 int 首先视为 1 (或 0 if False)。


推荐阅读