Определение дерева Trie с использованием lambda и defaultdict

#python #lambda #trie

#python #lambda #trie

Вопрос:

Я подумал, что приведенное ниже определение дерева trie может иметь бесконечный рекурсивный цикл определения, поскольку Trie определяется Trie и т.д. Но я пробовал, кажется, все в порядке. Интересно, почему нет бесконечного рекурсивного цикла определения?

 Trie = lambda: collections.defaultdict(Trie)
root = Trie()
cur = root
for c in 'hello':
    cur = cur[c]
  

Комментарии:

1. кстати, ваш цикл неверен, вы теряете исходную ссылку на root

2. …кроме того, вы просто определяете Trie как функцию, которая возвращает dict по умолчанию. Там нет ничего, что заставляло бы функцию вызывать саму себя.

3. @MarkMeyer, но когда python пытается разрешить функцию, определенную с помощью lambda, она может попытаться разрешить Trie в collections.defaultdict(Trie) , и попытка разрешить Trie может привести к бесконечному циклу определений?

4. @juanpa.arrivillaga обновлено

5. @LinMa нет, с чего бы это? Он просто ищет в глобальной области видимости имя, которое уже определено.