使用一个比另一个有好处吗?在Python 2中,它们似乎都返回相同的结果:
>>> 6/3
2
>>> 6//3
2
在Python 3.0中,5 / 2
将返回2.5
,而5 // 2
将返回2
。前者是浮点除法,后者是浮点除法,有时也称为整数除法。
在2.x行的Python 2.2或更高版本中,整数没有区别,除非你执行from __future__ import division
,这会导致Python 2.x采用3.0的行为
无论将来进口如何,5.0 // 2
将返回2.0
,因为这是该操作的分区结果。
你可以在https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator找到详细的描述
//
是地板分区,它总是会给你结果的整数层。另一个是“常规”分工。
等式的答案四舍五入为下一个较小的整数或浮点数,以小数点为.0。
>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
以上答案都很好。我想补充一点。最多一些值都会产生相同的商。在那个楼层除法运算符(//
)工作正常但不是除法(/
)运算符之后。
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
//
是地板分区,它总是会给你结果的底价。/
是浮点分区。以下是/
和//
之间的区别;我在Python 3.7.2中运行了这些算术运算
>>> print (11 / 3)
3.6666666666666665
>>> print (11 // 3)
3
>>> print (11.3 / 3)
3.7666666666666667
>>> print (11.3 // 3)
3.0
5.0//2
导致2.0
,而不是2
,因为//
运算符返回值的返回类型遵循python强制(类型转换)规则。
Python促进将较低数据类型(整数)转换为较高数据类型(float)以避免数据丢失。
它有助于澄清Python 2.x系列,/
既不是分区也不是真正的分区。目前接受的答案尚不清楚。当两个args都是int时,/
是一个分区,但当其中一个或两个args都是float时,它是真正的除法。
上面说明了更多的事实,并且比接受的答案中的第2段更清晰。
无论您的类型如何,//
都会实施“地板划分”。所以1.0/2.0
将给0.5
,但1/2
,1//2
和1.0//2.0
都将给0
。
有关详细信息,请参阅https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
/ - >浮点除法
// - >分区
让我们看一下python 2.7和Python 3.5中的一些例子。
Python 2.7.10与Python 3.5
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10与Python 3.5
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
现在,如果你想(在python 2.7中)与python 3.5中相同的输出,你可以执行以下操作:
Python 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
因为python 2.7和Python 3.5中的Floor division没有区别
138.93//3 ---> 46.0 #Python 2.7
138.93//3 ---> 46.0 #Python 3.5
4//3 ---> 1 #Python 2.7
4//3 ---> 1 #Python 3.5
正如大家已经回答的那样,//
是场上分裂。
为什么这很重要的是//
在2.2版的所有Python版本中都是明确的分区,包括Python 3.x版本。
/
的行为可能会改变:
__future__
导入与否(模块本地)-Q old
或-Q new
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
Python 2.7和其他即将推出的python版本:
/
)用左手操作数除左手操作数
示例:4 / 2 = 2
//
)操作数的除法,其结果是删除小数点后的数字的商。但是如果其中一个操作数是负数,则结果会被消除,即从零(向负无穷大)舍入:
示例:9//2 = 4
和9.0//2.0 = 4.0
,-11//3 = -4
,-11.0//3 = -4.0
/
Division和//
floor division运营商都以类似的方式运营。
双斜线,//
,是地板分区:
>>> 7//3
2
在这个答案中,我不仅会说出答案,还会说出//的好处。
大多数使用Python的人必须了解Python中的分区运算符(//)。对于那些不知道的人,该算子在除法后返回最低值。例如:5/2 = 2.5,但5 // 2 = 2(2是2.5的底值)
但是除法运算符通常对于大于10 ^ 17的数字表现异常。
x = 10000000000000000000006
if x / 2 == x // 2:
print("Hello")
else:
print("World")
对于上面的代码,将打印World而不是Hello。这是因为10000000000000000000006/2将返回5e + 21,但10000000000000000000006 // 2将返回正确的答案5000000000000000000003。即使int(10000000000000000000006/2)也将返回5000000000000000000000,这是不正确的。
因此,即使您想要分割大数字,也可以使用//运算符。
例如:如果要查找前100000000000000000000000010002个数字的总和,其公式为:n(n + 1)/ 2,则正常除法运算符(/)将给出错误答案,但//运算符将给出正确答案。