为了丰富学员们的课外知识,老师让我们助理分享这套Python系列教程。由于Python教程并非老师所写,所以不如老师的AI教学风趣幽默,望大家见谅!想要学习AI技术的新朋友可以去www.captainbed.net。本公众号由助理负责运营,只免费分享课外知识,不回复任何私信。PS:看不懂本篇文章的同学请从前面的文章看起,循序渐进每天学一点就不会觉得难了!
除法的行为在Python 3.0和Python 2.6中略有差异,实际上,有3种类型的除法,有2种不同的除法操作符,其中一种操作符在Python 3.0中有了变化:
X / Y
在Python 2.6或之前的版本中,这个操作对于整数会省去小数部分,对于浮点数会保持小数部分。在Python 3.0版本中将会变成真除法(无论任何类型都会保持小数部分)。
X // Y为Floor除法。这是在Python 2.2中新增的操作,在Python2.6和Python3.0中均能使用。这个操作不考虑操作对象的类型,总会省略掉结果的小数部分,剩下最小的能整除的整数部分。
添加真除法是为了解决最初的传统除法的结果依赖于操作数类型这一现象,其结果在Python这样的动态类型语言中很难预料。由于这一限制,Python 3.0取消了传统除法:/和//操作符在Python 3.0中分别表示为真除法和Floor除法。
下面是两个操作符在Python 3.0和Python 2.6中的用法:
C:\misc> C:\Python30\python
>>>
>>> 10 / 4 # Differs in 3.0: keeps remainder
2.5
>>> 10 // 4 # Same in 3.0: truncates remainder
2
>>> 10 / 4.0 # Same in 3.0: keeps remainder
2.5
>>> 10 // 4.0 # Same in 3.0: truncates to floor
2.0
C:\misc> C:\Python26\python
>>>
>>> 10 / 4
2
>>> 10 // 4
2
>>> 10 / 4.0
2.5
>>> 10 // 4.0
2.0
注意,在Python 3.0中,//的结果的数据类型总是依赖于操作数的类型:如果操作数中有一个是浮点数,结果就是浮点数;否则,结果是一个整数。尽管这可能与Python 2.X中类型依赖行为类似(正是该因素引发了在Python 3.0中的变化),但返回值类型的差异比返回值本身的差异要轻微很多。
尽管/的行为在Python 2.6和Python 3.0中不同,我们仍然能够在自己的代码中支持这两个版本。如果你的程序依赖于截断整数除法,在Python 2.6和Python 3.0中都使用//。如果你的程序对于整数需要带有余数的浮点数结果,那么就使用浮点数,从而确保代码在Python 2.6中运行的时候/的一个操作数是浮点数:
X = Y // Z # Always truncates,always an int result for ints in 2.6 and 3.0
X = Y / float(Z) # Guarantees float division with remainder in either 2.6 or 3.0
作为替代方法,我们可以使用一个__future__ import在Python 2.6中打开Python 3.0的/,而不是用浮点转换来强制它:
C:\misc> C:\Python26\python
>>> from __future__ import division # Enable 3.0 "/" behavior
>>> 10 / 4
2.5
>>> 10 // 4
2