Python中print(5 ** 2 ** 0 ** 1)输出结果为5的原因是什么?
5 ** 2 ** 0 ** 1输出5的核心原因 这个结果是Python幂运算符的结合性规则决定的,核心规则有两个:
- 幂运算符
**是Python算术运算符中优先级最高的一档,这个表达式里没有括号等更高优先级的语法,运算顺序完全由**的结合性决定 - 和加减、乘除这类默认从左往右算(左结合)的运算符不同,Python中的
**是右结合的:连续出现的幂运算,会从最右侧的子表达式开始,向左逐层计算。这个规则不是Python独有的设计,数学上的连续幂运算(幂塔)本身就默认按右结合计算,Python只是遵循了通用的数学约定。
分步计算逻辑
按照右结合规则,原表达式5 ** 2 ** 0 ** 1会自动按从右到左的顺序加括号,等价写法是5 ** (2 ** (0 ** 1)),逐层计算的过程非常清晰:
- 计算最右侧的
0 ** 1:0的1次方结果为0 - 把结果代入中间层,计算
2 ** 0:任意非零数的0次方结果为1 - 把结果代入最外层,计算
5 ** 1:任意数的1次方结果为5
你可以运行下面的代码验证逻辑:
# 和原表达式逻辑完全等价的右结合写法 print(5 ** (2 ** (0 ** 1))) # 输出 5 # 容易误判的左结合写法,结果完全不同 print(((5 ** 2) ** 0) ** 1) # 输出 1
内容的提问来源于stack exchange,提问作者Alexandre Baracat
相关产品推荐
相关产品推荐

