#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 нет, с чего бы это? Он просто ищет в глобальной области видимости имя, которое уже определено.