数字类型实战——除法:经典的、取整的、真正的——为什么截断很重要?
如果在使用系列 3,下面是关于除法操作符的小结以供参考:
>>> (5 / 2), (5 / 2.0), (5 / −2.0), (5 / −2) # 3.X 真正的除法
(2.5, 2.5, −2.5, −2.5)
>>> (5 // 2), (5 // 2.0), (5 // −2.0), (5 // −2) # 3.X 向下取整的除法
(2, 2.0, −3.0, −3)
>>> (9 / 3), (9.0 / 3), (9 // 3), (9 // 3.0) # 两种混合
(3.0, 3.0, 3, 3.0)
对系列 2 的读者,除法工作如下(整数 /
除法的三个输出和系列 3 不同):
>>> (5 / 2), (5 / 2.0), (5 / −2.0), (5 / −2) # 2.X 经典除法 (不同)
(2, 2.5, −2.5, −3)
>>> (5 // 2), (5 // 2.0), (5 // −2.0), (5 // −2) # 2.X 向下取整的除法 (相同)
(2, 2.0, −3.0, −3)
>>> (9 / 3), (9.0 / 3), (9 // 3), (9 // 3.0) # 两种混合
(3, 3.0, 3, 3.0)
系列 3 中 /
的不截断行为可能会破坏许多系列 2 的程序。或许是因为 C 语言的传统方法,许多程序员对整数的除法截断有依赖,必须在那种上下文中学习使用 //
作为代替。现在应该在所有新的系列 2 和系列 3 代码中这么做 —— 在前者中是为了对系列 3 的兼容性,在后者中是因为系列 3 中 /
没有截断的功能。关注在第 13 章中的一个简单的质数 while
循环的例子,还有在第 4 部分末尾的一个相应练习,它展示了可能被这个 /
改变影响的那种代码。还要对本章中使用过的特殊的 from
命令保持关注;它在第 25 章中被深入讨论。
推荐文章: