繁体   English   中英

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

[英]How to copy define function to make 'n' variations of it? (Python)

我需要将此代码制作'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落在不同范围内相比,我需要将其附加到另一个数组中。

如果有代码可以在没有太多代码的情况下执行此操作,那很好,但是我不知道该怎么做!

我不确定要使用函数做什么,但是可以在闭包内部创建函数,然后将它们作为项目放入某些列表中,如下所示:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM