当用于除法时,'/'和'//'之间有什么区别?

Ray*_*ega 431 python math syntax operators

使用一个比另一个有好处吗?在Python 2中,它们似乎都返回相同的结果:

>>> 6/3
2
>>> 6//3
2
Run Code Online (Sandbox Code Playgroud)

Eli*_*ght 591

在Python 3.0,5 / 2将返回2.55 // 2返回2.前者是浮点除法,后者是浮点除法,有时也称为整数除法.

在2.x行的Python 2.2或更高版本中,除非执行a 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找到详细说明.

  • 还有`python -Qnew`.其他分区选项:`-Qold`(默认),`-Qwarn`,`-Qwarnall` (2认同)
  • 值得指出的是,“ 5.0 / 2”在所有版本中都将返回“ 2.5”,以及“ 5 / 2.0”也是如此-仅当两个操作数均为“ int”时,旧的行为才有所不同。 (2认同)
  • 当数字为负时怎么办?负整数的行为是否相同? (2认同)

Yic*_*hun 64

它有助于澄清Python 2.x系列,/既不是底线分区也不是真正的分区.目前接受的答案尚不清楚./当两个args都是int时,它是floor division,但当args中的任何一个或两个都是float时,它是真正的除法.

上面说明了更多的事实,并且比接受的答案中的第2段更清晰.


Ken*_*ena 30

//无论您的类型如何,都实施"地板划分".所以 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


N R*_*awa 28

/ - >浮点除法

// - >分区

让我们看一下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
Run Code Online (Sandbox Code Playgroud)

Python 2.7.10与Python 3.5

  print (4/2)  ----> 2         Python 2.7
  print (4/2)  ----> 2.0       Python 3.5
Run Code Online (Sandbox Code Playgroud)

现在,如果你想(在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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

  • **回复:负数** - 行为是相同的,但请记住结果是下限,因此四舍五入始终是*向下*朝向*更负数*。一些例子: `-100 // 33` => **-4**; `100 // -33` => **-4**; 但由于 Floor func 的舍入方向,与前一个相比,下一个可能看起来违反直觉:`-100 // -33` => **3**。 (2认同)

u0b*_*6ae 21

正如大家已经回答的那样,//是分区.

为什么这很重要的是//,在2.2的所有Python版本中,包括Python 3.x版本,都是明确的分区.

/可以改变的行为取决于:

  • 是否有主动__future__导入(模块本地)
  • Python命令行选项,-Q old或者-Q new


Jon*_*eet 10

>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0
Run Code Online (Sandbox Code Playgroud)

  • 没有意识到地板除法也适用于非整数。谢谢! (2认同)

Ada*_*ire 6

//是楼层划分。它总是会给出结果的整数下限。另一种是“常规”划分。


Mar*_*ddy 5

双斜杠//是楼层划分:

>>> 7//3
2
Run Code Online (Sandbox Code Playgroud)


小智 5

**

  1. Python 2.7和其他即将推出的python版本:

** / Division 用右手操作数ex :: 4/2 = 2除左手操作数

Floor Division(//) - 操作数的除法,其中结果是删除小数点后的数字的商.但是如果其中一个操作数是负数,则结果是浮动的,即从零(向负无穷大)舍入:示例:9 // 2 = 4和9.0 // 2.0 = 4.0,-11 // 3 = -4 ,-11.0 // 3 = -4.0

/ Division和// floor division运营商都以类似的方式运营

  • 趋向无穷大并远离零是不同的事情。(-1.2和3.4)的示例:“覆盖”朝向负无穷大(-2和3),“截断”朝向零(-1和3),“饱和”远离零(-2和4),而“天花板”朝向正无穷大(-1和4)。 (2认同)