为什么这些速记不能互相配合?

时间:2019-07-19 06:54:51

标签: python

我想知道如何利用Python的if-else和+=的简写表示这个简单的表达式:

我尝试到处设置括号,并将+=更改为*=,但这并没有改变情况。

这按预期工作:

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

5 个答案:

答案 0 :(得分:4)

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

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)

这就是为什么在第二版中快速获得大量数字的原因-当aa时,您将b添加到False中。如果您想保留if,请继续:

a += (1 if b else 0)

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

编辑:为@Tomerikoo答案寻求更短的代码,但请记住,这些区域可能是泥泞的,并非所有人都知道/容易理解,将boolean添加到int首先将其视为1(如果{{1,则为0 }}。

答案 1 :(得分:3)

最接近您的亲身经历是:

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

由于bool是int的子类型,因此无需进行转换。

答案 2 :(得分:2)

您可以这样做:

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

答案 3 :(得分:2)

您也可以这样做:

for i in range(123):
    a = a + 1*b

因为布尔值整数:

>>> isinstance(True, int)
True
>>> True == 1
True

答案 4 :(得分:1)

请注意

a += x if condition else y
如果a += xcondition

将解析为True;否则将为a += y。这就是为什么您的人数越来越多的原因...

除此之外,我建议您使用U10-Forward's answer的建议。