0

谁能告诉我以下代码有什么问题?(在 Python 2.7 中)

def echo(msg):
    print msg


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

loop(5,echo("ok"))

我应该得到“ok”五次,但我只会得到“ok”一次,不管我设置 x 是多少。

4

3 回答 3

1

echo("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")
于 2013-03-29T04:41:43.597 回答
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)

请注意,这可以使用 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'))
于 2013-03-29T04:41:51.413 回答
-2

你可以试试这个:

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

loop(5,"Ok")
于 2013-03-29T04:39:17.603 回答