我需要在 Python 2.7 中执行简单的数学计算,包括求和、减法、除法、乘法、数字列表的求和等。
我想编写优雅、防弹且高效的代码,但我必须承认我对几件事感到困惑,例如:
- 如果我的等式中有
1/(N-1)*x
,我应该只编码1/(N-1)*x
还是1.0/(N-1)*x
、1.0/(N-1.0)*x
或这些的任何其他组合? - 对于除法,我应该使用
//
还是/
和from __future__ import division
? - 有哪些实践,例如“使用
math.fsum()
连接 float 列表”? - 我应该假设输入数字是 float 还是进行转换以防万一(可能会降低许多
float(x)
操作的效率)?
那么用 Python 编写简单数学计算代码的最佳实践是什么
- 优雅/Pythonic,
- 高效,
- 对诸如输入数据的确切数字类型( float 与整数)的不确定性等问题的防弹保护?
最佳答案
如果您使用 Python 2.7,总是使用
from __future__ import division
。它消除了很多困惑和错误。有了这个,你永远不必担心除法是否是 float ,
/
将始终是 float 而//
将始终是 int。您应该使用
float()
转换您的输入。您只需执行一次,并且不会对性能造成太大影响。我会像这样得到 float 列表的总和:
sum(li, 0.0)
,但如果需要精度,请使用math.fsum
这是专门为此创建的。最后,您的最终陈述令人困惑。您是指
1/((N-1)*x)
还是(1/(N-1))*x
?在第一种情况下,我将其写为1/(x * (N-1))
,在第二种情况下,我将其写为x/(N-1)
。两者都采用 3.x 样式划分。
此外,如果您想要一些真正的性能,请查看 numpy。
关于math - 在 Python 中编写简单数学计算的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678428/