2014-04-01 3 views
0

목표는 함수와 숫자를 인수로 전달하여 다른 함수에 전달한 다음 전달 된 함수를 반복적으로 n 번 호출하는 것입니다. 나는이 두 가지 방법을 구현했다. 이 버전은 예상대로 작동하여 을 세 번 인쇄하십시오.Python : 함수 전달 및 재귀 호출

def do_n(fx, n): 
    if n <= 0: 
     return 
    else: 
     print(fx) 
     do_n(fx, n-1) 

def return_greeting(): 
    return "Hello World" 

do_n(return_greeting(), 3) 

이 버전은 작동하지 않습니다. 그것은 한 번만 Hello World을 인쇄 한 다음을 통해 처음 이후에 호출 된 함수를 잃을 것 같다

두 번째 버전이 print_greeting을 초래하지 않는 이유

누군가가 설명 할 수 가 3 회 Hello World 3 번 인쇄를 호출되고

def do_n(fx, n): 
    if n <= 0: 
     return 
    else: 
     fx 
     do_n(fx, n-1) 

def print_greeting(): 
    print("Hello World") 

do_n(print_greeting(), 3) 
화면?

+2

당신이 실제 코드를 게시 할 수 ? 여기에'define'은'SyntaxError'를 발생시킵니다 ... – mgilson

답변

2

두 번째 버전은 print_greeting을 세 번 호출하지 않습니다. 실제로 두 버전 중 어느 버전도 호출하지 않습니다.

각 코드 스 니펫의 마지막 줄에 print_greeting을 정확히 한 번 호출합니다. 그 줄에서 여러분은 그것을 호출하고 문자열을 반환하고 문자열을 do_n 함수에 전달하면됩니다.

당신은 당신이이 일을해야 무슨 생각을 할 수 있도록하기 위해 두 번째 조각 두 변경할 수 있습니다

먼저, 은 마지막 줄에 전화 print_greeting 해달라고. 그것은 다음과 같아야합니다

do_n(print_greeting, 3) 

그런 식으로, 당신은 당신의 do_n 기능으로 실제 기능 print_greeting를 전달합니다. 이 같은

둘째, 전화 (지금 fx라고도 함) 전달 기능 :

fx() 

괄호는 여기에서 의미하는 "이 함수를 호출".

전체 조각은 다음과 같아야합니다

def do_n(fx, n): 
    if n <= 0: 
     return 
    else: 
     fx() 
     do_n(fx, n-1) 

def print_greeting(): 
    print("Hello World") 

do_n(print_greeting, 3) 
+0

철저한 응답을 해주셔서 감사합니다. 나는 당신이 제공 한 정보를 바탕으로 의도 한대로 작성되도록 "working"버전을 수정했습니다. –

1

fx 아무것도하지 않습니다. 실제로 함수를 호출하려면 fx()라고 말한 것 같습니다.

+0

또한 함수를 괄호없이'print_greeting'으로 전달하십시오. –

0

첫 번째 버전에서는 Hello World 문자열을 do_n 함수에 전달하고 n 번 인쇄하므로 실제로 n 번만 인쇄됩니다 (실제로는 함수를 호출하지 않음). 두 번째 버전에서

, 당신은 문자열을 가지고 있지만 당신은 당신이이 기능이 정말 전화를 만들고 싶어 it..If, 당신은 귀하의 코드를 변경해야 선언됩니다

def do_n(fx, n): 
    if n <= 0: 
     return 
    else: 
     fx() 
     do_n(fx, n-1) 

def return_greeting(): 
    print "Hello World" 

do_n(return_greeting, 3)