关于 Python 中的左侧装订
Regarding left-sided Binding in Python
我是 Python 的新手,我还在学习中。我在使用运算符时了解了左侧绑定的概念(并且被教导只有取幂使用 RIGHT-SIDED BINDING)。我还了解到,*
和 /
具有相同的优先级,运算符的绑定决定了一些具有相同优先级的运算符执行的计算顺序,并排放在一个表达式中。
但是现在在教授复合赋值运算符时,他们使用了下面的例子
a = 6
b = 3
a /= 2 * b
print(a)
给出的答案是1.0
。
他们给出的解释如下。
2 * b = 6
a = 6 → 6 / 6 = 1.0
我的问题是,a/=2*b
和 a=a/2*b
不是一回事吗?因此,在考虑 a=a/2*b
时,不应该首先考虑除法,因为左侧绑定,然后再考虑乘法。
a = 6 → 6/2 = 3.0
3.0 * b = 9.0.
所以 9.0
不应该是答案。请给我解释一下。
语句 a /= 2 * b
等价于 a /= (2 * b)
,而不是 (a /= 2) * b
,这在 Python 中没有意义。
如果您确实将其解释为 (a /= 2) * b
,那么它将扩展为 (a = a / 2) * b
,而不是 a = (a / 2) * b
。这在 Python 中是不允许的,因为 a = a / 2
不是表达式,它不会产生可以乘以 b
.
的值
答案是赋值运算符 _ = _
和扩充赋值运算符如 _ /= _
的优先级低于其他运算符(如 _ * _
和 _ / _
),并且它们在句法上是“右结合”的,因此 a = b = c
将结果 c
分配给 a
和 b
;但是,写成等同于 a = (b = c)
是不正确的,因为由于上述原因,这在 Python 中没有意义。尽管如此,_ ** _
并不是 Python 中唯一的右结合运算符:另一个是三元运算符 _ if _ else _
,其中表达式 a if b else c if d else e
等价于 a if b else (c if d else e)
, 不是 (a if b else c) if d else e
.
Python 遵循数学中常用的运算顺序,其中指数优先于 multiplication/division,指数优先于 addition/subtraction。复合运算符是此顺序中的最后一个。因此,在您的示例中,首先评估 2*b 和 returns 6。然后评估 a/=6 和 returns 1.
我是 Python 的新手,我还在学习中。我在使用运算符时了解了左侧绑定的概念(并且被教导只有取幂使用 RIGHT-SIDED BINDING)。我还了解到,*
和 /
具有相同的优先级,运算符的绑定决定了一些具有相同优先级的运算符执行的计算顺序,并排放在一个表达式中。
但是现在在教授复合赋值运算符时,他们使用了下面的例子
a = 6
b = 3
a /= 2 * b
print(a)
给出的答案是1.0
。
他们给出的解释如下。
2 * b = 6
a = 6 → 6 / 6 = 1.0
我的问题是,a/=2*b
和 a=a/2*b
不是一回事吗?因此,在考虑 a=a/2*b
时,不应该首先考虑除法,因为左侧绑定,然后再考虑乘法。
a = 6 → 6/2 = 3.0
3.0 * b = 9.0.
所以 9.0
不应该是答案。请给我解释一下。
语句 a /= 2 * b
等价于 a /= (2 * b)
,而不是 (a /= 2) * b
,这在 Python 中没有意义。
如果您确实将其解释为 (a /= 2) * b
,那么它将扩展为 (a = a / 2) * b
,而不是 a = (a / 2) * b
。这在 Python 中是不允许的,因为 a = a / 2
不是表达式,它不会产生可以乘以 b
.
答案是赋值运算符 _ = _
和扩充赋值运算符如 _ /= _
的优先级低于其他运算符(如 _ * _
和 _ / _
),并且它们在句法上是“右结合”的,因此 a = b = c
将结果 c
分配给 a
和 b
;但是,写成等同于 a = (b = c)
是不正确的,因为由于上述原因,这在 Python 中没有意义。尽管如此,_ ** _
并不是 Python 中唯一的右结合运算符:另一个是三元运算符 _ if _ else _
,其中表达式 a if b else c if d else e
等价于 a if b else (c if d else e)
, 不是 (a if b else c) if d else e
.
Python 遵循数学中常用的运算顺序,其中指数优先于 multiplication/division,指数优先于 addition/subtraction。复合运算符是此顺序中的最后一个。因此,在您的示例中,首先评估 2*b 和 returns 6。然后评估 a/=6 和 returns 1.