2012-11-22 3 views
0

I가 'N'해야 할 코드의 복사본 그래서정의 함수를 복사하여 '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이 다른 범위에 속한 경우와 다른 배열에 추가해야합니다.

너무 많은 코드없이이 작업을 수행 할 수있는 코드가 있지만 그 작업을 수행하는 방법을 모르겠습니다.

+2

무엇 ... 왜 D o 같은 일을하는 20 개의 함수가 필요합니까? .. –

+2

함수 본문 안의 빈 목록을 이동 한 다음 하나의 함수 만 가질 수 있습니까? 결과가 다른 20 개의 변수가있을 수 있지만 같은 일을하는 20 개의 함수가 필요하지 않습니다. – RocketDonkey

+0

나는 그들을 쓰레기통으로 취급하고 있기 때문에 나는 그것을 필요로한다. 'binnum'이 특정 범위 사이에있는 경우 binnum이 다른 범위에 속한 경우와 다른 배열에 추가해야합니다. –

답변

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) 

그래서

f = get_functions(20) 

하고보다하면이처럼 전화 : (20 개) 기능 당신은이를 만드는 것과 같은 방법으로 생성?

f[6](binnum) 
+3

테스트하지는 않았지만'ccfarrays = [[]] * count'와 같은 목록을 만들면 실제로 각 요소가 동일하게 만들어 지므로 한 요소에 미래의 추가는 실제로 모든 요소에 적용됩니다. 그 코드가 나중에 설명 될지 확신하지 못합니다. 수식을 파악할만큼 영리하지 않을 수 있습니다. – RocketDonkey

+0

대단히 감사합니다. 도움에 감사드립니다 !! –

+0

@RocketDonkey 네, 맞습니다. 이제 고칠 것입니다. – Bunyk

관련 문제