Trie是一个节点列表:
class node:
def __init__(self, parent, daughters, edge):
self.parent = parent
self.daughters = daughters
self.edge = edge
trie.append(self)
self.index = len(trie) - 1
def TrieConstruction(patterns):
global trie
for node in trie:
print('Node: ', node.parent, node.daughters, node.edge, node.index)
trie.append(node(0, [], 0))
...
程序给出了这个错误:
File "trieMatching.1.py", line 22, in TrieConstruction
trie.append(node(0, [], 0))
UnboundLocalError: local variable 'node' referenced before assignment
我不知道为什么这个变量会被取消分配;该功能不了解节点'节点'是一个类,我正在实例化它?
答案 0 :(得分:4)
您对类和node
循环目标使用名称for
:
class node:
# ...
for node in trie:
# ...
trie.append(node(0, [], 0))
如果trie
为空,node
将在函数中保持未绑定状态,因为没有要分配给它的值。
您必须重命名其中一个。我建议你按照Python style guide使用CamelCase作为类名:
class Node:
您的函数的和lower_case_with_underscores(以及更能反映责任的名称):
def construct_trie(patterns):