Python3中**与*、/与//运算符的区别及优先级详解
本文详解Python3中**与*、/与//运算符的区别。**为幂运算,*为乘法,大数计算时**可能溢出而*返回inf;/为真除法返回float,//为地板除取整。同时梳理了赋值、比较、逻辑、位及三元运算符的优先级,幂运算最高,三元最低。
在Python中,**运算符用于表示次方运算。
具体示例如下。
>>>12 * 12
144
>>>12 ** 2
144
>>>a=1e200
>>> a
1e+200
>>>a ** 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')
>>>a * a
inf
>>>a = 100 ** 100 # python3中int整型一般不会溢出,取决于内存
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>>a * a,a ** 2 # 两种方式都没问题,int很大,不会溢出,取决于内存
(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000)
>>>float(a) * float(a) #float用这种方法,也不会溢出
inf
>>>float(a) ** 2 #float用这种方式有可能溢出,注意!!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: (34, 'Result too large')
补充说明:在Python3.8版本中,/和//运算符存在明显区别。
参考以下两张截图进行对比。


执行5/5的结果为1.0,而5//5的结果为1。
执行6.0/5.0的结果为1.2,而6.0//5.0的结果为1.0。
由此可见,使用/运算符时,即使两个参数均为int类型,返回值依然是float类型;而//运算符只有在参数中包含float时,返回值才是float类型,但其结果会进行取整处理。
/和//的主要区别总结如下。
//运算符的结果是向下取整(floor),而/运算符会保留小数位。
补充:Python3中各类运算符及其优先级顺序如下。
1. 基础算术运算符:
+(加)、-(减)、*(乘)、/(真除法)、%(取模)、//(地板除)、**(幂运算)。
2. 赋值运算符:
=
3. 增强型赋值运算符:
+= -= *= /= %= **= //=
a+=1(运行效率较高)。
a=a+1(运行效率相对较低)。
4. 布尔比较运算符:
== > < >= <= !=
支持连续判断语法:
3>2>1
返回True。
3>2 and 2>1
返回True。
5. 逻辑运算符:
not、and、or的优先级顺序为:
not优先级最高。
and次之。
or优先级最低。
6. 位运算符:
位是指二进制表示中的每一位。
<<和>>为移位运算符。
&用于逻辑按位与运算。
|用于逻辑按位或运算。
~用于逻辑按位非运算。
^用于逻辑按位异或运算。
7. 三元运算符:
语法格式为:变量 = (值1 if 布尔表达式 else 值2)。
如果布尔表达式为真,则返回值1;否则返回值2。
在各类运算符中,三元运算符的优先级最低。
1. 运算顺序遵循先乘除后加减的原则。
2. 幂运算(**)的优先级最高。
3. 三元运算符的优先级最低。
4. 运算符的元数越少,优先级越高。
幂运算属于一元运算符。
5. 优先级从高到低排列如下:
幂运算(**)。
正负号(+/-)。
算术运算符(*、/、%、//)。
比较运算符(<、>、<=、>=)。
逻辑运算符(not、and、or)。
以上为个人经验分享,希望能给大家一个参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









