python双斜杠是什么意思-双斜杠含义解析
比如你想算 `30 除以 4`,写 `30 // 4` 就能拿到 `7`。
这跟一般/平平除法不一样,它把小数删掉了。 要是我不想要小数,只想剩整数局部,那就得用 `%`。想算结局倒着回,那就用取模 `%`。
这两个符号是 Python 的标准定义,从 3.0 版本启动就硬塞进来了,随意哪位写代码都能看懂,不用猜。 再说说浮点除法。记不记得字典 `round()` 那事儿?它默认是四舍五入,数学上的“四舍五入”,不是你想象的那样。
比如 `2.5` 会变成 `3`,`1.5` 还是 `2`。
这种操作在编程里特别常见,用来对结局做个“整形”。
这和 `//` 不同,`//` 是截断,一直往下切,小数直接当零扔掉了。 举个例子,算一下 `2.5 // 2` 会是多少?答案是 `1`。出于整数除法就是“向下取整”。
那 `7 // 2` 呢?那就是 `3`。
这跟 Python 的 `int()` 函数效果一样,都是把浮点数变成整数。 再来看看取模。21 除以 7 除得 3,刚好整除,余数是 0。21 除以 8 呢?商 2,余数是 5。
故此 `21 % 8` 等于 5。
这里有个细节要啰嗦一下,Python 的取模依据是“浮点数除法求商后的余数”,不是别的啥算法。 实际上 Python 当初设计时,为了兼容 C 和 Fortran,特意选了 `//` 做整数除法。出于这两个语言里都是整数除,Python 照搬,显得逻辑挺顺。并且 C 语言里要是除零会报错,Python 就不怕。 我认定能够把 `//` 理解为 Python 的“地板”函数。想取整,就用它。
比如算 `200 // 100`,要是用一般/平平除法 `200 / 100 = 2.0`,那取整就得再加 `1` 要么用 `int()`。但直接写 `200 // 100` 就是 `2`。 这里有个坑,要是除数是 0,Python 会直接崩。`10 // 0` 会抛出一个 ZeroDivisionError。
故此写代码前最好先判判除数是不是 0。 再讲讲性能。在 Python 里,`//` 和 `/` 实际上差别挺大的。`/` 是浮点除法,讲究精度,速度慢一点。`//` 是整数除法,速度快点。
要是做批量计算,要么干那种对精度要求不高、只求整数的活儿,敲 `//` 能省不少力气。 还有,别被某些教程误导了。有些老旧的文档或教材会用 `divmod()` 函数来解决。
这个函数回两个值:商和余数。
比如 `7 % 3` 是 `3` 和 `1`。
那 `200 // 100` 回 `2` 和 `0`。
要是你在一个循环里需求商和余数,直接用 `//` 就行,不用每次都查函数。 实际上 `//` 在函数式编程里也有用。
比如 list 切片 `lst // 4` 这种写法在 PyPy 里比较常见,别看 Python 标准版赞成受限,但大量第三方库还是如此写的。 再说说注意事项。别看 `//` 挺标准,但别随意改它的行为。
比如某些自定义的类重载了 `//`,那就别指望它遵循 Python 的整数除法规则了。
这时候得看具体代码。 最终总结一下。Python 的 `//` 就是个整数除法符号。别把它搞混了,别去改它的优先级。
要是是浮点运算,老老实实用 `/`。
要是是整型运算,直接用 `//`。写代码时,记得多试几个数据,看看结局是正数还是负数,别光看输出值。
声明:演示网站所有内容,若无特殊说明或标注,均来源于网络转载,仅供学习交流使用,禁止商用。若本站侵犯了你的权益,可联系本站删除。
