2017-09-08 2 views
1

나는 파이썬 3에서 "거의 반복한다"라는 코드를 가지고 있고 그것을 줄이는 쉬운 방법을 찾고있다.파이썬 3에서 거의 반복되는 코드 줄이기

N 변수가있는 함수 f (x1, ..., xN)가 있습니다. 사용자는 변수 x5를 선택하고 다른 변수가 고정 된 f vs x5의 플롯을 얻습니다. 나는 항상 각각 다른 XI에 대해 다음을 수행, 손 N 기능에 의해 작성할 수 있습니다

def get_Array_To_Plot_x5(x1, ..., x5Start, x5End, numberOfX5, ..., xN): 
     return [f(x1, ..., xN) for x5 in numpy.linspace(xiStart, xiEnd, numberOfXi)] 

가 그럼 난 사용자 입력에 따라 내 주요 스크립트에 적절한 get_Array_To_Plot_xi 기능 (이 예에서는 get_Array_To_Plot_x5)를 호출하는 것, 그리고 이 배열을 그립니다.

이 코드를 작성하는 더 좋은 방법이 있습니까? 이 스크립트를 나를위한 텍스트 파일로 작성하는 또 다른 코드를 작성할 수는 있지만 가능하다면 좀 더 우아한 솔루션을 기대합니다.

편집 :

def get SWaveEnergies(V0, mu, B_Zeeman, alpha, Delta, W, L, noOfLevels, a, t): 
    return some_floating_number 

def SWave_vsMu(muStart, muEnd, noOfmu, V0, B_Zeeman, alpha, Delta, W, L, noOfLevels=6, a=1, t=1.0): 
    return [SWaveEnergies(V0, mu, B_Zeeman, alpha, Delta, W, L, noOfLevels, a, t) for mu in np.linspace(muStart, muEnd, noOfmu)] 
: 여기

내가 (필자는 Kwant 라이브러리를 사용하여 S 파 위상 초전도체의 에너지 레벨을 계산하고 있습니다) 작성한 코드입니다 : 미친 물리학의 요청에 따라 샘플 코드 추가

다른 것으로 이것을 작성했습니다 : xiStart, xiEnd, noOfxi. 사용자의 명령 행 입력은 내가 호출 한 기능을 결정합니다.

+0

'x1 ... xN'은 단일 배열 또는 별도의 변수로 제공됩니까? –

+0

적어도이 인수를 설정하는 방법과 함수를 호출하는 방법에 관해서는 좀 더 많은 컨텍스트를 제공하면이 기능을 이해하면 도움이 될 것입니다. –

+0

원래 사용자는 선택한 것을 제외하고 모든 xi에 대해 단일 값을 제공합니다. 선택된 값에 대해, 그들은 효과적으로 배열 (또는 배열을 구성하기에 충분한 정보)을줍니다. –

답변

1

for 루프 또는 목록 이해의 변수는 실제로 간단한 변수 이름뿐만 아니라 할당 할 수있는 모든 표현식 ("lvalue") 일 수 있습니다. 즉, 모든 매개 변수가 목록에 있으면 코드를 복제하지 않고 색인을 통해 해당 목록의 임의 요소를 반복 할 수 있습니다. 다음과 같은 내용 :

def get_Array_To_Plot(whichParam, start, end, number, *args): 
    args = list(args) # must be writable list, not tuple 
    values = numpy.linspace(start, end, number) 
    return [f(*args) for args[whichParam] in values] 

반복 할 매개 변수의 더미 값을 매개 변수 목록에 입력해야합니다.

+0

당신은이 이해력을 테스트 해 보았습니까 :'[f (* args) for args [whichParam] in values]'? –

+0

이것은 굉장합니다 : 루프 변수를 이와 같은 목록 요소와 같은 임의의 위치에 숨길 수 있는지 몰랐습니다. 나에게 매우 유용한 새로운 것을 가르쳐 주셔서 감사합니다! –

+0

고맙습니다. 이것은 내 문제를 해결해야합니다. –