2014-10-23 3 views
3

아주 기본적인 질문이어야하지만 고차 함수를 처리하는 가장 파이썬적인 방법이 무엇인지 궁금합니다. 나는 f 가지고 g는 이미 정의 :이 두 기록은 다른 어디 놓칠 수있는 점을고차 함수를 작성하는 가장 파이썬 방법

import functools 

def gen_func(f,g,x): 
    return f(x)+g(x) 

wanted_func = functools.partial(gen_func, f, g) 

그리고이있을 수 있습니다 :

def f(x): 
    return x**2 

def g(x): 
    return x**3 

def gen_func(f,g): 
    def func(x): 
     return f(x)+g(x) 
    return func 

wanted_func = gen_func(f, g) 

또는?

+1

'gen_func'에서'return func'을하고 싶습니까? –

+0

예, 오타되었습니다 : 편집 됨! 기능 구성을위한 –

+0

, 당신이 가지고있는 것을 위해 -> http://stackoverflow.com/q/13219320/674039 – wim

답변

1

글쎄, 당신은 다음과 같은 한 줄의 찬성을 제거 할 수, 다른 곳 gen_func를 사용하지 않는 가정 :

wanted_func = functools.partial(lambda f, g, x: f(x) + g(x), f, g) 

...하지만 그렇게 읽을 수 및 부분 함수가 아닙니다 응용 프로그램은 실제로 중복됩니다. 그들 사이에 차이가 (내가 아는)이없는 당신 예제 정도로 정말 당신까지,

wanted_func = lambda x: f(x) + g(x) 

을하지만 :뿐만 아니라 바로 작성할 수 있습니다. 나는 "pythonic"도그마를 피할 것이고, 가장 유익하다고 생각하는 것은 무엇이든간에, 파이썬 커뮤니티가 옳다고 생각하는 것이 아닌, 특정 유즈 케이스에 가장 적합한 것을 사용하십시오.

파이썬은 언어이며, 말한 언어와 마찬가지로 사용 방법에 관한 규정 규칙은 표현력을 제한하는 경향이 있음을 기억하십시오. 나는 이것을 Newspeak과 비교하고 싶다.