파이썬에서는 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=10
및 height=5
다음 과 같이 사용하십시오 .
volume_radius_10 = make_cylinder_volume_func(10)
volume_radius_10(5)
=> 1570.7963267948967
함수를 반환하는 것은 함수 내부에 새 함수를 정의하고 마지막에 반환하는 간단한 문제입니다. 각 함수에 대해 적절한 매개 변수를 전달하는 데주의해야합니다. 참고로 다른 함수에서 함수를 반환하는 기술을 currying이라고 합니다.
10
당신이 전달한 건 어딘가에 보관되어 있습니까? 언제 쓰레기를 수거합니까?
익명 함수라고도하는 람다를 사용하면 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
lambda h:
제거되면 기능이 동일하게 작동합니까?
return
반환하기 전에 결과를 평가하려고 시도하고 변수가 많기 때문에 일부 부동 값을 반환하기 때문입니다 (함수를 반환하면 작동합니다). lambda
다음 코드를 평가해서는 안되며 변수 r의 범위가 make_cylinder..
.
파티에 너무 늦었다는 건 알고 있지만이 솔루션이 흥미로울 것 같습니다.
from math import pi
from functools import partial
def cylinder_volume(r, h):
return pi * r * r * h
make_cylinder_with_radius_2 = partial(cylinder_volume, 2)
make_cylinder_with_height_3 = partial(cylinder_volume, h=3)
print(cylinder_volume(2, 3)) # 37.6991118431
print(make_cylinder_with_radius_2(3)) # 37.6991118431
print(make_cylinder_with_height_3(2)) # 37.6991118431
다음은 작동 방식 에 대한 문서partial
입니다.