如何复制定义函数以使其'n'变化? (蟒蛇)

时间:2012-11-22 20:30:51

标签: python arrays function copy

我需要制作此代码的'n'份副本:

ccfarray1=[]
def ccf1(binnum):
    for i in datarange:
        ccf=((a[i]-xbar)*(c[(i-binnum)]-ybar))/(norm*stdevx*stdevy)
        parray.append(ccf)
        calc=sum(parray)
    ccfarray1.append(calc)
    del parray[:]
    return ccfarray1

所以例如它的一个副本是:

ccfarray2=[]
def ccf2(binnum):
    for i in datarange:
        ccf=((a[i]-xbar)*(c[(i-binnum)]-ybar))/(norm*stdevx*stdevy)
        parray.append(ccf)
        calc=sum(parray)
    ccfarray2.append(calc)
    del parray[:]
    return ccfarray2

每次制作新阵列时,ccfarray'n'。

我需要这样20次,但这是很多复制和粘贴。是否有一个优雅的解决方案来编码,如果我需要改变我需要它的次数。

我需要很多这些,因为我把它们视为垃圾箱。如果'binnum'落在某个范围之间,那么我需要将它附加到不同的数组,而不是binnum落在不同范围之间。

如果有代码可以做到这一点而没有那么多代码,那很好,但我不知道该怎么做!

1 个答案:

答案 0 :(得分:0)

我不完全确定你想对你的函数做什么,但你可以在闭包中创建函数,而不是将它们作为项目放到某个列表中,如下所示:

def get_functions(count):
    ccfarrays=map(lambda: [], range(count))
    def get_nth_func(n):
        def ccf1(binnum):
            for i in datarange:
                ccf=((a[i]-xbar)*(c[(i-binnum)]-ybar))/(norm*stdevx*stdevy)
                parray.append(ccf)
                calc=sum(parray)
            ccfarray[n].append(calc)
            del parray[:]
            return ccfarray[n]
        return ccf1
    return map(get_nth_func, range(count)

所以,如果你想要20个函数,你就像这样创建它们:

f = get_functions(20)

而不是像这样打电话给他们:

f[6](binnum)