为了丰富学员们的课外知识,老师让我们助理分享这套Python系列教程。由于Python教程并非老师所写,所以不如老师的AI教学风趣幽默,望大家见谅!想要学习AI技术的新朋友可以去www.captainbed.net。本公众号由助理负责运营,只免费分享课外知识,不回复任何私信。PS:看不懂本篇文章的同学请从前面的文章看起,循序渐进每天学一点就不会觉得难了!


//操作符通常叫做截断除法,但是,更准确的说法是floor除法,它把结果向下截断到它的下层,即真正结果之下的最近的整数。其直接效果是向下舍入,并不是严格地截断,并且这对负数也有效。你可以使用Python的math模块来自己查看其中的区别:

>>> import math

>>> math.floor(2.5)

2

>>> math.floor(-2.5)

-3

>>> math.trunc(2.5)

2

>>> math.trunc(-2.5)

-2

对于正数来说,截断除法和floor除法是相同的;对于负数,截断除法和floor除法是不同的。下面是在Python 3.0中的情况:

C:\misc> c:\python30\python

>>> 5 / 2,5 / -2

(2.5,-2.5)

>>> 5 // 2,5 // -2       # Truncates to floor: rounds to first lower integer

(2,-3)                            # 2.5 becomes 2,-2.5 becomes -3

>>> 5 / 2.0,5 / -2.0

(2.5,-2.5)

>>> 5 // 2.0,5 // -2.0   # Ditto for floats,though result is float too

(2.0,-3.0)

Python 2.6中的情况类似,但是/的结果有所不同(无法理解这个知识点的同学请看前一篇文章):

C:\misc> c:\python26\python

>>> 5 / 2,5 / -2    # Differs in 3.0

(2,-3)

>>> 5 // 2,5 // -2  # This and the rest are the same in 2.6 and 3.0

(2,-3)

>>> 5 / 2.0,5 / -2.0

(2.5,-2.5)

>>> 5 // 2.0,5 // -2.0

(2.0,-3.0)

如果你真的想要截断而不管符号,可以总是通过math.trunc来得到一个浮点除法结果,而不管是什么Python版本:

C:\misc> c:\python30\python

>>> import math

>>> 5 / -2                    # Keep remainder

-2.5

>>> 5 // -2                   # Floor below result

-3

>>> math.trunc(5 / -2)        # Truncate instead of floor

-2

C:\misc> c:\python26\python

>>> import math

>>> 5 / float(-2)             # Remainder in 2.6

-2.5

>>> 5 / -2,5 // -2           # Floor in 2.6

(-3,-3)

>>> math.trunc(5 / float(-2)) # Truncate in 2.6

-2