Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。
Float和range()
您可能已经注意到,到目前为止我们所处理的所有数字都是整数,也称为整数。这是因为range()只能以整数作为参数。
浮点一词:
在Python中,如果一个数字不是整数,那么它就是一个浮点。整数和浮点之间有一些区别。
整数(int数据类型):
·是整数
·不包括小数点
·可以是正数、负数或0
浮点数(浮点数据类型):
·可以是包含小数点的任何数字
·可以是正的也可以是负的
尝试用浮点调用range(),看看会发生什么:
你应得到如下错误信息:
如果你需要找到一个可以让你使用浮点的解决方案,那么你可以使用NumPy。
使用NumPy
NumPy是第三方Python库。如果你要使用NumPy,第一步是检查你是否安装了它。
以下是你在REPL做到这一点的方法:
如果你得到了一个ModuleNotFoundError,那么你需要安装它。为此,请转到命令行并输入pip install numpy。
一旦安装完毕,请输入以下内容:
它的返回如下:
如果要换行打印每个数字,可以执行以下操作:
输出如下:
0.8999999999999999从哪来的?
计算机在二进制浮点数字中保存十进制浮点数字是困难的。这导致了各种意想不到的数字表示。
注:为了了解为什么有小数的问题,你可以看看这篇文章和Python文档。
您可能还想看一下十进制库,它在性能和可读性方面略有下降,但是允许您准确地表示十进制数。
另一个选择是使用round(),您可以在中了解更多相关内容。请记住,round()有自己的怪癖,可能会产生一些令人惊讶的结果!
这些浮点错误是否对你来说是个问题,取决于你正在解决的问题。误差将存在于第十六位小数处,绝大多数时候这是微不足道的。它们太小了,除非你正在计算卫星轨道或其他东西,否则你不必担心它。
或者,您也可以使用np.linspace()。它本质上是相同的,但是使用不同的参数。使用np.linspace(),可以指定start和end(包含两者)以及数组的长度(而不是step)。
例如,np.linspace(1, 4, 20)给出了20个等距的数字:1.0, ..., 4.0.另一方面,np.linspace(0, 0.5, 51)给出0.00, 0.01, 0.02, 0.03, ..., 0.49, 0.50.
循环前行
现在,你已了解如何使用range()并处理其局限性。您还可以了解Python 2和Python 3之间的这个重要功能是如何演变的。
下一次你需要执行一个特定的次数,胸有成竹!
祝你Python编程玩得开心!
英文原文:https://realpython.com/python-range/
译者:盈韬