Вы передаете results
вниз по рекурсии и увеличиваете, но никогда не возвращаете его обратно "вверх". Если results
был объектом, и вы просто передавали ссылку, вы могли бы посмотреть на нее после корневого вызова addleafnodes
.
Следующее вернет сумму обратно в рекурсию:
from xml.etree.ElementTree import XML
expr = """<root>
<expression>
<add>
<number>1</number>
<number>2</number>
<number>3</number>
</add>
</expression>
</root>
"""
root = XML(expr)
def addleafnodes(root, results):
for child in root:
if root.tag != "root" and root.tag != "expression":
results += int(child.text)
results = addleafnodes(child, results)
return results
newresults = addleafnodes(root, 0)
print(newresults)
Я думаю, что этот функциональный подход хорош, но вы также можете просто обновить глобальную переменную изнутри рекурсии (я удалил results = 0
из этого фрагмента).
Обратите внимание, я не уверен, что код нарушается более глубокими структурами выражений (например, вложенные добавления и т. Д.).