我是python的新手,我试图在这里理解一个基本错误。我得到一个TypeError:'list'对象在下面的代码中不是可调用的错误。有人可以解释一下我的代码中有什么问题吗?
graph = {'a': ['b', 'c'], 'b': ['a', 'c'], 'c': ['b', 'd'], 'd': ['a'], 'e': ['a']}
def reachable(graph, node):
res = [node]
reachable = graph[node]
for currentnode in reachable:
if currentnode not in res :
reachableNodes = reachable(graph,currentnode) << TypeError:
for newNode in reachableNodes:
if newNode not in res :
res.append(newNode)
return res
错误:TypeError:'list'对象不可调用错误
答案 0 :(得分:7)
您通过执行reachable = graph[node]
隐藏了功能名称。使用其他名称。
答案 1 :(得分:1)
reachable
是您递归调用的模块名称。
在第3行,当你说reachable = graph[node]
时,它会覆盖变量reachable
,该变量被绑定到一个函数,现在链接到一个列表(或者什么都有)。
当你在第6行尝试以递归方式调用该函数时,它最终会尝试调用reachable
所在的列表并且失败。
要解决此更改变量的名称,您打算将列表保存为与reachable
canreach = graph[node]
for currentnode in canreach:
同时仔细检查您的可访问功能。有可能无限递归。每次递归调用reachable
时,您都在创建res
的新实例。所以if currentnode not in res
永远不会错。尝试将res作为参数传递,或将其用作全局。