2012-04-10 5 views
1

Это мой первый раз, так что я был бы признателен за ваше терпение с тем, что может выглядеть как хромой глядя вопрос :)Вызов функции п раз с двумя параметрами

Я пытаюсь написать функцию под названием do_n что принимает объект функции и число, n, в качестве аргументов, а затем вызывает данную функцию n раз. Вот код:

def name(): 
    print 'Jack' 

def do_n(fo, x): 
    if x <= 0: 
     return 
    print fo 
    (fo, x-1) 

При вызове функции из внутри основной:

do_n(name, 3) 

я получаю следующий результат:

<function name at 0x01F93AF0> 

Я пытаюсь получить программу для печати вып:

Jack 
Jack 
Jack 

Большое спасибо в объявлении vance

+0

Этот вопрос приходит из «Подумайте Python» Аллен B. Дауни. Вопрос и его контекст можно найти по адресу: http://www.greenteapress.com/thinkpython/html/thinkpython006.html – ewm

ответ

5

Вы не вызываете функцию и не выполняете рекурсивный вызов. Исправленная версия:

def name(): 
    print 'Jack' 

def do_n(fo, x): 
    if x <= 0: 
     return 
    fo() 
    do_n(fo, x - 1) 

Для вызова функции n раз, вы обычно используете для цикла вместо хвоста рекурсии в Python:

for dummy in range(10): 
    name() 
+0

Замечательно! Спасибо за помощника по разъяснению. – tamiromara

+0

Есть ли более чистый способ, чем это? Фиктивная переменная не используется ... – Har

+1

@ user1932405: Вот почему она называется «манекен». Я на самом деле думаю, что это прекрасно читаемо. Вы можете делать такие вещи, как «map (apply, repeat (name, 10))» (Python 2.x, 'repeat' из' itertools'), чтобы избежать явного упоминания переменной счетчика. Конечно, в любом случае это создало бы внутреннюю переменную счетчика, а также бесполезный список возвращаемых значений. Честно говоря, я никогда не сталкивался с прецедентом для простого вызова функции без параметров 10 раз, поэтому все это может быть немного академическим. –

2

Функции являются первоклассными объектами в Python.

fo() 
Смежные вопросы