首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于Python中的左侧绑定

关于Python中的左侧绑定
EN

Stack Overflow用户
提问于 2021-05-17 11:15:09
回答 2查看 676关注 0票数 2

我是Python的新手,我还在学习。在使用运算符时,我已经学习了左侧绑定的概念(并且被教导只有求幂才使用右侧绑定)。我还学到,*/具有相同的优先级,运算符的绑定决定了一些具有相同优先级的运算符执行的计算顺序,将它们并排放在一个表达式中。

但现在,在教授复合赋值运算符时,他们使用了以下示例

代码语言:javascript
运行
复制
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不应该是答案吗?请给我解释一下。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-17 11:24:30

语句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同时赋值给ab;然而,将其等同于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

票数 2
EN

Stack Overflow用户

发布于 2021-05-17 11:26:38

Python遵循数学中常用的操作顺序,其中指数优先于乘法/除法,而指数又高于加法/减法。复合运算符是此顺序中的最后一个。因此,在您的示例中,首先计算2*b并返回6,然后计算a/=6并返回1。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67563590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档