赞
踩
实际上,Python中有三种风格的除法,以及两种不同的除法运算符,其中一种运算符在Python3.X中有所变化。这部分内容非常细节化,但它是Python3.X中另一个主要的变化,而且可能会破坏2.X的代码,所以下面直接给出除法运算符的描述。
X / Y
经典除法和真除法。在Python2.X或者之前的版本中,这个操作对于整数会省去小数部分,对于浮点数会保持余项(小数部分)。在Python3.X变成真除法,即无论任何类型。最终的浮点数结果都会保留小数部分。
X // Y
向下取整除法。这是从Python2.2开始新增的操作,在Python2.X和3.X中均能使用,这个操作不考虑对象的类型,总是会省略结果的小数部分,剩下最小的能够整除的整数部分,它的结果类型取决于操作数的类型。
Python中引入真除法,是为了解决经典除法的结果依赖于操作数类型(这种结果在Python这样的动态语言中很难预料)的现象。由于这一限制,Python3.X中移除了经典除法: / 和 // 运算符在Python3.X中分别实现了真除法和向下取整除法。
在Python3.X中, / 现在总是执行真除法,不管操作数的类型,都返回包含任意小数部分的一个浮点数结果。// 执行向下取整除法,它截取掉余数并针对整数操作数返回一个整数,如果有一个操作数是浮点数类型,则返回一个浮点数。
要注意,在Python3.X中,//的结果的数据类型总是依赖于操作数的类型:如果操作数中有一个是浮点数,结果就是浮点数,否则,结果就是一个整数。
此外,由于// 运算符是作为依赖于整数截断除法的程序而引入的一种兼容性工具,因此它必须为整数返回整数。
向下取整除法 vs 截断除法
一个细节是: // 运算符有一个非正式的别名,叫做截断除法,不过更准确的说法应该是向下取整除法。 // 把结果向下截断到它的下层,即真正结果之下的最近的整数,其直接效果是向下舍入,并不是严格的截断,并且这对负数也有效,你可以使用Python的math模块来查看其中的区别。
floor返回数字的下舍整数,所以返回的结果的是-3
和 // 结果相同,这意味着 // 不是对结果去除小数部分,而是向下获取最近的整数。所以称为向下取整除法。
对于trunc是对结果进行截断操作,其结果总是趋近于0,。
对于正数,截断除法和向下取整除法是相同的,对于负数,//向下取整除法得到的是 向下 最近的最近整数。(向下!向下!向下!!!)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。