首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python上的操作顺序是如何进行的?

Python上的操作顺序是如何进行的?
EN

Stack Overflow用户
提问于 2018-02-23 05:26:01
回答 6查看 60.2K关注 0票数 12

我的问题看起来像这样:

代码语言:javascript
运行
复制
  10-7//2*3+1 

我应该去解这个方程式。

在使用PEMDAS时,我的答案似乎是8:

代码语言:javascript
运行
复制
First its's 2*3 = 6; 10-7//6+1
second = 7//6= 1; 10-1+1
Third = 10-8 = 8;

但是当把它放到python中时,我得到了一个2。为什么会这样呢?

看起来程序顺序是这样的:

代码语言:javascript
运行
复制
first: 7//2=3; 10-3*3+1
second: 3*3=9; 10-9+1
third:10-9+1= 2; 2

我还是不明白。

EN

回答 6

Stack Overflow用户

发布于 2018-02-23 05:31:19

PEMDAS is PEMDAS;乘法和除法具有相同的优先级,加法和减法也是如此。当除法运算符出现在乘法运算之前时,除法运算将首先进行。

Python运算符的执行顺序由operator precedence控制,并遵循相同的规则。具有较高优先级的运算符在优先级较低的运算符之前执行,但当它们在同一组中时,运算符具有匹配的优先级。

对于10-7//2*3+1,您有两类运算符,从最低到最高:

  • +, - (与AS ==加法和subtraction)
  • *, @, /, //, %相关(与MD相关,so乘除)。

因此首先执行//*;乘法和除法属于同一组,而不是这里的固定顺序(MD并不意味着乘法先于除法):

代码语言:javascript
运行
复制
10 - ((7 // 2) * 3) + 1

所以首先执行7 // 2,然后是3的乘法,然后得到10的减数,最后加1。

我们忽略了一个问题,这个问题不会影响您的特定情况,但对于编写真正的Python程序非常重要。PEMDAS实际上并不是关于操作的顺序;它并不决定计算事物的顺序。它实际上是关于参数分组的。PEMDAS说a + b + c * d被评估为(a + b) + (c * d),但它没有说明首先评估a + b还是c * d

在数学中,你首先评估什么并不重要,只要你尊重参数分组。在Python语言中,如果仅仅因为b()c()在括号中就先在a() + (b() + c())中对它们求值,那么可能会得到完全不同的结果,因为Python函数可能会有副作用。

Python表达式求值通常从左到右执行。例如,在a() + b() + (c() * d())中,求值顺序如下:

现在它的参数是ready

  • c()

  • d()

  • the *,现在它的参数是ready

  • a()
  • b()
  • the
  • +,现在它的参数是ready

这是尽管*和围绕乘法的圆括号具有很高的优先级。

票数 26
EN

Stack Overflow用户

发布于 2018-02-23 05:30:54

PEMDAS更好地表达为

代码语言:javascript
运行
复制
P   Parentheses, then
E   Exponents, then
MD  Multiplication and division, left to right, then
AS  Addition and subtraction, left to right

所以在你的表达式中,除法应该在乘法之前完成,因为它在乘法的左边。完成这些操作后,再做减法和加法。

票数 14
EN

Stack Overflow用户

发布于 2018-02-23 05:29:57

这是有文档记录的here (Python文档/表达式/运算符优先级):

  • Multiplication和除法(包括整数除法)发生在相同的优先级上,因此顺序由操作数为grouped:
  • Evaluation的方向决定。所有乘法和除法的顺序是从左到右的(与大多数二进制操作类似,exponentiation).

除外

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

https://stackoverflow.com/questions/48937457

复制
相关文章

相似问题

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