Nice programing

다른 함수를 반환하는 함수를 어떻게 작성합니까?

nicepro 2020. 11. 3. 19:16
반응형

다른 함수를 반환하는 함수를 어떻게 작성합니까?


파이썬에서는 make_cylinder_volume(r)다른 함수를 반환 하는 함수를 작성하고 싶습니다 . 반환 된 함수는 매개 변수로 호출 할 수 있어야하며 h높이 h와 반경 이있는 실린더의 볼륨을 반환 해야합니다 r.

파이썬의 함수에서 을 반환하는 방법을 알고 있지만 다른 함수를 어떻게 반환 합니까?


Python을 사용하여 이것을 시도하십시오.

import math
def make_cylinder_volume_func(r):
    def volume(h):
        return math.pi * r * r * h
    return volume

예를 들어 radius=10height=5다음 과 같이 사용하십시오 .

volume_radius_10 = make_cylinder_volume_func(10)
volume_radius_10(5)
=> 1570.7963267948967

함수를 반환하는 것은 함수 내부에 새 함수를 정의하고 마지막에 반환하는 간단한 문제입니다. 각 함수에 대해 적절한 매개 변수를 신중하게 전달해야합니다. 참고로 다른 함수에서 함수를 반환하는 기술을 currying이라고 합니다.


익명 함수라고도하는 람다를 사용하면 volume내부 함수 make_cylinder_volume_func를 한 줄로 추상화 할 수 있습니다 . Óscar López의 답변과 다르지 않지만 람다를 사용하는 솔루션은 여전히 ​​'더 기능적'이라는 의미입니다.

다음은 람다 식을 사용하여 허용 된 답변을 작성하는 방법입니다.

import math
def make_cylinder_volume_fun(r):
    return lambda h: math.pi * r * r * h

그런 다음 다른 카레 함수처럼 호출합니다.

volume_radius_1 = make_cylinder_volume_fun(1)
volume_radius_1(1) 
=> 3.141592653589793

pymonad로 이것을 할 수 있다는 것을 지적하고 싶습니다

 import pymonad 

 @pymonad.curry
 def add(a, b):
     return a + b

 add5 = add(5)
 add5(4)
 9

참고 URL : https://stackoverflow.com/questions/14261474/how-do-i-write-a-function-that-returns-another-function

반응형