次のコードで何が間違っているのか教えてもらえますか? (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」を 5 回取得する必要がありますが、x の値に関係なく、「OK」を 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")
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'))
これを試すことができます:
def loop(times,message):
for i in range(times):
print message
loop(5,"Ok")