可能重複:
「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)再次... – 2012-01-13 16:04:23
是的,沒什麼可做的具有遞歸功能。 – 2012-01-13 16:06:13
哈哈,謝謝。 – 2012-01-13 16:06:48