0

我需要制作此代码的“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 落在不同的范围之间。

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

4

1 回答 1

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)
于 2012-11-22T20:58:37.173 回答