可能性の重複:
“Least Astonishment” in Python: The Mutable Default ArgumentPython関数と空の文字列
編集:これはrecusionとは何の関係もありませんし、単に変更可能なデフォルト引数の機能である:多くの"Least Astonishment" and the Mutable Default Argument
ありがとう
私はpython 2.7.2を使っていますwin7の64ビットマシンと機能は次のようになり、lxmlの要素に作用する再帰関数を持っている:
def recursive_search(start, stack = []):
for element in start.getchildren():
if condition1(element):
stack = recursive_search(element, stack)
elif condition2(element)
stack.append(element)
else:
pass
return stack
私が初めて関数を呼び出すとき:
output = recursive_search(starting_element)
それが正常に動作し、
output += recursive_search(starting_element)
またはスタックは、グローバル変数であるかのように:私が呼んでいるかのように、私は私が期待するものを手に入れるが、私は正確に同じコマンドを使用して、再びそれを呼び出す場合、私は私が期待するもの二回取得します。私は三度目、それを呼び出した場合、私は3倍の出力を得るなどなど
私が呼び出す場合:
output = recursive_search(starting_element, [])
その後、私は好きなように私はこのように何度も呼び出すことができますし、私は得ることはありません異常な行動。
同様に、私はそれが読み込むように機能を変更する場合:
def recursive_search(start, stack = []):
if stack == []:
stack = []
for element in start.getchildren():
if condition1(element):
stack = recursive_search(element, stack)
elif condition2(element)
stack.append(element)
else:
pass
return stack
は、私が呼び出すことができます。
output = recursive_search(starting_point)
何度でも私は好きで、再び異常な動作を得られないとして。
私の質問は:何が起こっているのですか?これはバグですか、あるいはPythonで空の文字列を再帰関数に渡すときに知っていることはありませんか?
もう一度[デフォルトの可変引数](http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument)... –
はい、何もしません再帰関数を使用します。 –
aha、ありがとうございます。 –