2013-03-29 82 views
0

任何人都可以在下面的代码中告诉我什么是错的? (在Python 2.7)Python中的循环函数

def echo(msg): 
    print msg 


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

loop(5,echo("ok")) 

我应该得到“确定”五次,而是我只是得到“确定”一次,无论什么 量我集X是。

+1

'echo(“ok”)'打印*正确然后*评估为'无'。在'y'上面加上'print a'并在'while'上面加上'print'start''以查看我的意思。如果你想推迟函数或lambda中的评估传递(然后用'()'调用它)。 – 2013-03-29 04:38:15

回答

1

回声(“OK”)正在将它传递给可能的功能之前评估,这是你真正想要

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

有没有什么办法可以保留哪些函数是循环变量,以便我可以使用相同的“循环”函数我需要循环的一切? – user1

+0

@ user2223232:我编辑了代码,是你想要的吗? – intelis

+0

好吧,我的意思是更像Moshe/JoseP的解决方案,它不仅能够使用“回声”功能,还能循环选择我所选择的任何功能。感谢您的帮助,虽然... – user1

1

这是因为你”当您致电loop时重新评估echo("ok")

你可能想要做的是在每次迭代时调用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) 

请注意,这可以使用lambda函数更简洁地完成。

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