次のような関数を使用して、Python で奇妙なことに遭遇しました。
def foo(x):
if int(x)!=4:
x = raw_input("Wrong guess, please enter new value: " )
foo(x)
else:
print "Good Job! %s was right"%x
return x
value = foo(x=raw_input("Guess a Number between 1 and 10: "))
print value
たとえば、「1」、「2」、「3」、「4」と入力すると、次のように出力されます。
Good Job! 4 was right
2
関数が正しい答えを正しく識別しているように見えるため、これは紛らわしいですが、そうすると、最新の応答ではなく、2 番目の応答である値が返されます。
この再帰関数の「x」のバインディングで何が起こっているのか、誰か説明できますか?