Найти - Пользователи
Полная версия: Помогите улучшить код с рекурсией
Начало » Python для новичков » Помогите улучшить код с рекурсией
1
vkopey
Эта функция возвращает элемент документа XML по заданному индексу. Например, корневой элемент имеет индекс 0, первый его подэлемент - 1 и т.д. Чувствую, что немножко наговнокодил. Можно ли обойтись без глобальных переменных, без переменных res и result, и без вложенной функции?

def getElByIndex (self, node, index):
'''Возвращает элемент по индексу'''
global i, res
i = 0 # начальный индекс
res = None # найденный элемент
def f (node, index): # рекурсивная функция
global i, res
if node.nodeType == Node.ELEMENT_NODE: # если это элемент
if i == index: # если индекс равен заданному
res = node # запомнить результат
i + = 1 # увеличить индекс
if node.hasChildNodes: # если узел имеет дочерние
for child in node.childNodes: # для всех дочерних
f (child, index)
f (node, index)
result = res
del i, res
return result
atomAltera
Вместо global можно nonlocal использовать, ещё можно, как я понял вместо последнего if elif использовать, ну и зачем res и result когда одним можно обойтись?

def getElByIndex (self, node, index):
'''Возвращает элемент по индексу'''
i = 0 # начальный индекс
result = None # найденный элемент
def f (node, index): # рекурсивная функция
nonlocal i, result
if node.nodeType == Node.ELEMENT_NODE: # если это элемент
if i == index: # если индекс равен заданному
result = node # запомнить результат
i + = 1 # увеличить индекс
elif node.hasChildNodes: # если узел имеет дочерние
for child in node.childNodes: # для всех дочерних
f (child, index)
f (node, index)
return result
Возможности проверить не было, так что извеняйте если что

p.s. Удалять локальные переменные тоже не надо: сами удалятся
vkopey
nonlocal - это для Python 3, а во втором кажись нету такого.
Но спасибо и за это!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB