def apply_twice(func,arg):
return func(func(arg))
def add_five(x):
return x+5
print (apply_twice(add_five,10))
내가 얻을 출력이 하나 실제로이 그것으로 실행하는 코드를 확장누구나이 기능적 프로그램이 어떻게 작동하는지 설명 할 수 있습니까?
def apply_twice(func,arg):
return func(func(arg))
def add_five(x):
return x+5
print (apply_twice(add_five,10))
내가 얻을 출력이 하나 실제로이 그것으로 실행하는 코드를 확장누구나이 기능적 프로그램이 어떻게 작동하는지 설명 할 수 있습니까?
그것을 분해하여 작업하는 방법을 누군가가 나를 설명 working.Can 방법처럼 나를 혼란 (20)
입니다
apply_twice(add_five,10))
add_five(add_five(10)) # add_five(10) = 15
print
호출로 시작, 다음
apply_twice
를 호출하면 (20)
, 당신은 함수 객체와 값이 전달됩니다 당신에게 결과를 제공
add_five(15) # add_five(15) = 20
. apply_twice
정의에서 볼 수 있듯이 func
이 전달 된 함수 객체 (이 경우 add_five
)로 대체됩니다. 그런 다음 내부 func(arg)
호출로 시작하여 그 결과를 add_five
외부의 return func(...)
호출로 다시 전달합니다.
apply_twice(func,arg)
함수가 호출 함수 arg
func
전달할 두 인수 함수 객체 func
, 인수 걸린다. 파이썬에서
, 기능은 쉽게 다른 인수 유형 (즉이 first class citizens) 다르게 치료하지 , 인수로 다른 함수에 건네 줄 수가 있습니다.
apply_twice
내부 func
은 라인에 두 번 호출됩니다
func(func(arg))
어느 대안으로 더 친화적 인 방법으로 볼 수 있습니다 :
res = func(arg)
func(res)
당신이 이름으로 func
을 교체하는 경우 add_five
에 전달 된 함수는 다음과 같습니다.
res = add_five(arg) # equals: 15
add_five(res) # result: 20
물론 예상 결과가 반환됩니다. 이에서 기억해야 할
중요한 점은 당신이 어떤 특별한 구조로 Python
의 기능으로 생각해야한다는 것입니다, 기능은 int
의 같은 객체, lists
들 그리고 다른 모든 것들입니다.