2013-03-29 78 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