2013-03-29 2 views
0

Может ли кто-нибудь сказать мне, что не так в следующем коде? (В Python 2.7)Loop function in python

def echo(msg): 
    print msg 


def loop(x,y): 
    a = 0 
    while (a < x + 1): 
     a = a + 1 
     y 

loop(5,echo("ok")) 

я должен получать «OK» в пять раз, но вместо этого я просто получаю «КИ» один раз, независимо от того, что суммы, которую я установить й быть.

+1

'echo (" ok ")' prints * right then * и оценивать 'None'. Добавьте 'print a' над' y' и добавьте 'print 'start" 'выше' while', чтобы понять, что я имею в виду. Если вы хотите отложить оценку оценки в функции или лямбда (а затем вызвать ее с помощью '()'). –

ответ

1

эхо («хорошо») в настоящее время оценивается, прежде чем передать его функции, может быть, это то, что вы действительно хотите

def loop(x,y, *args): 
    a = 0 
    while (a < x + 1): 
      a = a + 1 
      y(*args) 

def echo(msg): 
    print msg 

loop(5,echo, "ok") 
+1

Спасибо, что это работает! :) – user1

-2

Вы можете попробовать это:

def loop(times,message): 
    for i in range(times): 
      print message 

loop(5,"Ok") 
+0

Есть ли способ сохранить, какая функция является переменной цикла, так что я могу использовать ту же функцию «loop» для все, что мне нужно, чтобы петли? – user1

+0

@ user2223232: Я редактировал код, это то, что вы хотите? – intelis

+0

Ну, я имел в виду больше, чем решения Moshe's/JoseP, имея возможность не только использовать функцию «эхо», но и любую функцию, которую я выбрал. Спасибо за помощь, хотя ... – user1

1

Это потому, что вы» повторно оценивая echo("ok"), когда вы позвоните loop.

Что вы, вероятно, хотите сделать, это позвонить echo("ok") на каждой итерации.

def echo(msg): 
    print msg 

def call_echo_ok(): 
    echo("ok")  

def loop(x,y): 
    a = 0 
    while (a < x + 1): 
     a = a + 1 
     y() 

loop(5, call_echo_ok) 

Обратите внимание, что это можно сделать более кратко с помощью лямбда-функций.

def echo(msg): 
    print msg 

def loop(x,y): 
    a = 0 
    while (a < x + 1): 
     a = a + 1 
     y() 

loop(5, lambda: echo('ok')) 
+0

Большое спасибо! – user1