2014-11-13 2 views
0

임의의 수의 변수와 매개 변수 n이있는 함수를 허용하고 동일한 함수를 반환하지만 1을 n 번째 변수에 추가하는 함수를 파이썬에서 작성하려고합니다. 예를 들어 d = f(w, x, y, z)과 같은 함수가 주어지면 func_want(d, 2)으로 함수를 호출하면 => f(w, x, y+1, z)이 생성됩니다. 마찬가지로, 다음 e = f(x,y) 나는 다양한 가지 인자 함수를받는 함수를 구성하는 *args을 사용하지만 변수를 기반으로 '분할'하는 방법을 통합하는 방법을 알아낼 수없는 방법을 이해 func_want(e, 0) => f(x+1,y)다양한 길이의 함수를 사용하는 함수

경우 인덱스 (즉, n)

+0

뭔가를 (인수)'정말 오히려 스케치 의사보다 완전한 파이썬 코드에 예를 작성 도움이 될 – epascarello

+0

그 꽤 의미가 없습니다. 'd = f (w, x, y, z)'가 파이썬 코드 인 경우'd'는'f'가 반환 된 것이므로'd'를 사용하여'f'를 호출 할 방법이 없습니다 다시 다르게. – abarnert

+0

Duly 지적. 답변 감사합니다. – gobrewers14

답변

2

당신이 *args를 사용은 args 당신은 얻을 수 있도록 args[n] 그냥 n 번째 인수, 그냥 튜플이다. 그래서 args[:n] + (args[n]+1,) + args[n+1:]을 할 수 있습니다. 또는 아마도 더 읽기 쉽도록 args을 목록으로 변환하십시오. 예를 들어

:

def func_want(func, n): 
    def wrapper(*args): 
     args = list(args) 
     args[n] += 1 
     return func(*args) 
    return wrapper 

def f(w, x, y, z): 
    return w, x, y, z 

func_want(f, 2)(0, 0, 0, 0) 

... (0, 0, 1, 0)를 반환합니다.

0
def function_want(f, n): 
    return f(lambda *args: args[:n] + (args[n]+1,) + args[n+1:])[0] 
def f(*args): 
    return args 

지금 우리가 n=5 여부를 확인한 경우 우리가 얻을 :리스트 '와 같은

>>> new_f = function_want(f, 5) 
>>> new_f(0,0,0,0,0,0) 
(0, 0, 0, 0, 0, 1) 
관련 문제