Python代码示例优化

Python代码示例优化,python,scipy,Python,Scipy,我在scipy.stats中查看了Kolmogorov-Smirnov测试的实现,并看到了以下代码: D = np.max([Dplus,Dmin]) if mode == 'asymp': return D, distributions.kstwobign.sf(D*np.sqrt(N)) if mode == 'approx': pval_two = distributions.kstwobign.sf(D*np.sqrt(N)) if N > 2666 or

我在
scipy.stats
中查看了Kolmogorov-Smirnov测试的实现,并看到了以下代码:

D = np.max([Dplus,Dmin])
if mode == 'asymp':
    return D, distributions.kstwobign.sf(D*np.sqrt(N))
if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    if N > 2666 or pval_two > 0.80 - N*0.3/1000.0 :
        return D, distributions.kstwobign.sf(D*np.sqrt(N))
    else:
        return D, distributions.ksone.sf(D,N)*2
我认为最好按以下方式进行:

D = np.max([Dplus,Dmin])
pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
if mode == 'asymp':
    return D, pval_two
if mode == 'approx':
    if N > 2666 or pval_two > 0.80 - N*0.3/1000.0 :
        return D, pval_two
    else:
        return D, distributions.ksone.sf(D,N)*2
我的实现确实节省了对昂贵的分发生存函数的调用,而且我觉得它也更清晰了一点

但我不是Python专家,
scipy
是一个经过深思熟虑的库(至少在我看来是这样)。那么你能解释一下为什么图书馆第一次这么做吗

我的实现确实省去了对昂贵的分发生存函数的调用,而且我觉得它也更清晰一些

不,没有
distributions.kstwobign.sf(D*np.sqrt(N))
只调用一次。看看这三个可能的分支。它在任何给定的分支中只执行一次

if mode == 'asymp':
    return D, distributions.kstwobign.sf(D*np.sqrt(N))

if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    if N > 2666 or pval_two > 0.80 - N*0.3/1000.0 :
        return D, distributions.kstwobign.sf(D*np.sqrt(N))
if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    # not the previous if case
    else:
        return D, distributions.ksone.sf(D,N)*2

if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    if N > 2666 or pval_two > 0.80 - N*0.3/1000.0 :
        return D, distributions.kstwobign.sf(D*np.sqrt(N))
if mode == 'approx':
    pval_two = distributions.kstwobign.sf(D*np.sqrt(N))
    # not the previous if case
    else:
        return D, distributions.ksone.sf(D,N)*2

这个问题可能更适合于第二个分支,如果满足第二个if条件,相同的调用将执行两次?