如何复制定义函数使';n';它的变体?(Python)
我需要制作此代码的“n”个副本:如何复制定义函数使';n';它的变体?(Python),python,arrays,function,copy,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 cc
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)
f = get_functions(20)
f[6](binnum)
因此,如果您想要20个函数,只需按如下方式创建它们:
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)
f = get_functions(20)
f[6](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)
f = get_functions(20)
f[6](binnum)
什么?。。为什么你需要20个函数来做同样的事情呢?你能把你的空列表移到函数体中,然后只有一个函数吗?你可能有20个不同结果的变量,但你不应该需要20个做同样事情的函数。我需要它们,因为我把它们当作垃圾桶。如果“binnum”位于某个范围内,那么我需要将它附加到不同的数组,而不是binnum位于不同的范围内。然后,您需要一个数组集合,并且您的函数可以使用
binnum
来决定使用哪个数组。如何创建数组集合,在这里找不到任何关于它的信息。或者你的意思是仅仅手工写出20个数组?这不太好,因为如果我选择新的数据,可能需要更多的数组,我希望我的代码运行起来就像我所需要做的只是更改数据和运行代码,而不干扰参数一样。我还没有测试过它,但是创建一个像ccfarrays=[[]]*count这样的列表实际上会使每个元素都相同,所以将来附加到一个元素实际上会影响所有元素。不确定这是否在您的代码后面解释-我可能不够聪明,无法掌握公式:)非常感谢您,感谢您的帮助@Bunyk看起来更好-如果你想避免lambdas:@RocketDonkey我想你是对的,列表理解更像python。