gpt4 book ai didi

python - 计算顺序

转载 作者:太空宇宙 更新时间:2023-11-03 23:54:09 25 4
gpt4 key购买 nike

示例:10 ** 4*3 ** 2

我们老师说python先计算3**2,然后计算10**4,然后将答案相乘。

但是如果乘法的两边具有相同的优先顺序并且 python 从左到右读取,它不是先执行 10**4 然后执行 3**2?

(我的问题不是关于操作的顺序或优先级,因为双方具有相同的优先级顺序)

最佳答案

你的老师错了。来自 https://docs.python.org/3/reference/expressions.html#evaluation-order :

6.15. Evaluation order

Python evaluates expressions from left to right. Notice that whileevaluating an assignment, the right-hand side is evaluated before theleft-hand side.

* 有两个表达式作为其操作数,10**43**2。首先计算左操作数 10**4,然后计算右操作数 3**2

您的老师可能会对像 2 ** 3 ** 4 这样的指数链感到困惑。这里的“外部”求幂有两个参数 23 ** 4(而不是 2**34,因为右结合性)。但是,2 仍然在 3**4 之前计算。

对于像这样一个简单的表达式,它并不重要。但是,如果一个或两个操作数涉及具有副作用的函数调用,它可能很重要。考虑像 lambda: print(3) or 3)() + (lambda: print(4) or 4)() 这样人为设计的东西。无论哪种方式,表达式的值都是 7,但是调用 print 函数的顺序会影响输出。但是,Python 保证 3 将在 4 之前输出。


有些语言(尤其是 C、IIRC)没有指定求值顺序,因此先求左值还是先求右值是一个实现细节。这意味着您无法预测像 i=3; 这样的值。 j=(i++)*i; j 可以是 3*3 == 94*3 == 12,具体取决于 i在评估右侧操作数之前或之后递增。 (不过,我不记得这是被认为是未定义的行为还是实现定义的行为。)

关于python - 计算顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com