这个周末我在做一个项目,我需要用二项式分布来测试事件的概率(x/y字符是给定随机字节的字母数字的概率)。我的第一个解决方案是自己编写测试,因为它相当简单。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
def binomial_prob(n,k,p):
bin_coeff = (factorial(n))/(factorial(k)*factorial(n-k))
return = bin_coeff * pow(p,k) * pow((1 - p),(n-k))
我用过这个然而,SciPy包含了一个binom_测试方法,它确实做到了这一点但是,对于分布来说,这可能会显著地增加大小(需要scipy和numpy),这是一个相对简单的测试。我想一个辅助问题是Py2EXE有多智能。它只是从scipy和numpy或者整个库中导入我使用的模块吗?我希望只引用我引用的模块,但我猜下一个问题是scipy.stats依赖多少个模块。但我离题了…所以我的问题是,什么时候我应该使用已经编写好的代码,代价是包含的代码远远超出了我的需要,什么时候我应该只编写自己的实现?
(我将其标记为python,但我认为这可能是一个更一般的问题)
最佳答案
“我什么时候应该使用已经编写的代码,代价是包含的代码远远超出了我的需要”
总是。
我应该什么时候写我自己的实现?
从未。
“包括远远超过我需要的”这个问题通常是相当愚蠢的。你在乎“包括”多少钱吗?
只有当你在写嵌入式软件并且内存严重受限的时候,这才是最重要的。
对于所有其他的编程——所有其他的编程——不要三思而后行尽早并经常包含预先编写的代码少写一点。更快地解决问题操作系统将把未使用的页换出内存。你完全可以忽略它们。
编程是解决问题,而不是产生代码代码越少越好没有代码是最好的。