【发布时间】:2020-05-21 18:50:05
【问题描述】:
我是 Python 新手,我无法弄清楚这一点。我确信这是我忽略的非常简单的事情。
我正在学习 Python 中的复合赋值运算符,我了解到这个表达式:
var = var / 5 * 2
可以用 /= 操作符写成:
var /= 5 * 2
这是我不明白的。如果我设置 var = 20 然后求解这个表达式:
var = var / 5 * 2
var = 20 / 5 * 2
var = 4 * 2
var = 8
我的答案是 8。
如果我将 'var = var / 5 * 2' 放入 IDLE,我会得到 8 作为 var 的新值。
但是,如果我把 var 放回 20 并在 IDLE 中求解这个表达式:
var /= 5 * 2
我得到的答案是 2.0 作为 var 的新值。
我不明白为什么在使用复合赋值运算符时会得到不同的结果?
如果我设置 var = 20 并解决这个表达式:
var = var / (5 * 2)
var = 20 / (10)
var = 2.0
然后我在不使用复合赋值运算符的情况下得到相同的答案。
因此,似乎 /= 运算符默认为表达式添加了括号。这就是正在发生的事情吗?如果我不了解如何正确使用复合赋值运算符,我可以看到这会导致很多错误。
如果有人能向我解释这一点,我将不胜感激。谢谢!
【问题讨论】:
-
使用augmented assignment,首先计算右侧,然后执行除等于。
-
该化合物不会在其周围添加 () - 它会在右侧执行所需的操作。如果你想除以 5,然后乘以 2 执行
var /= 5,然后是var *= 2。或者改用var *= 2/5 -
当你看到 /= 或 += 或 -=... 那里的操作符将被最后执行
-
知道了。因此,这不仅仅是将表达式 x = x
y 转换为 x =y 的简单转换。您必须了解规则,并且可能需要重新编写表达式才能正确评估。我想在简单的例子中,这只是一个简单的转换,但对于更复杂的表达式,你必须“制作”正确的表达式以确保它的计算正确。
标签: python operators variable-assignment