Python抛出奇怪的NameError:名称<function_name>未定义

1 投票
2 回答
11354 浏览
提问于 2025-04-16 20:33
import networkx as nx #@UnresolvedImport
from networkx.algorithms import bipartite #@UnresolvedImport
from operator import itemgetter
from random import choice

corpus = open('/home/abehl/Desktop/Corpus/songs.wx', 'r')

ALPHA = 1.5
EPSILON = 0.5

song_nodes = []
word_nodes = []    

edges = zip(song_nodes, word_nodes)

B = nx.Graph(edges)
degX,degY = bipartite.degrees(B, word_nodes)

sortedSongNodesByDegree = sorted(degX.iteritems(), key=itemgetter(1))
print sortedSongNodesByDegree

song_nodes2 = []
word_nodes2 = []
Vc = list(set(word_nodes))

edges2 = zip(song_nodes2, word_nodes2)
C= nx.Graph(edges2)

for songDegreeTuple in sortedSongNodesByDegree:
    for i in range(songDegreeTuple[1]):
        connectedNodes = C.neighbors(songDegreeTuple[0])
        VcDash = [element for element in Vc if element not in connectedNodes]
        calculateBestNode(VcDash)

def calculateBestNode(VcDashsR):
    nodeToProbailityDict = {}
    for node in VcDashsR:
        degreeOfNode = bipartite(C, [node])[1][node]
        probabiltyForNode = (degreeOfNode ** ALPHA) + EPSILON
        nodeToProbailityDict[node] = probabiltyForNode

在上面的Python程序中,Python解释器报了一个错误,尽管程序里已经定义了'calculateBestNode'这个函数。请问我是不是漏掉了什么?

名称错误:名字 'calculateBestNode' 没有被定义

抱歉我在这里发了一个比较大的程序。

2 个回答

3

你在程序中尝试使用一个叫 calculateBestNode() 的函数,但你还没有在程序里定义这个函数。所以解释器不知道这个函数是啥。

8

一个Python程序是从上到下执行的,所以你需要在使用一个函数之前先定义它。一个常见的做法是把所有自动执行的代码放在一个叫做main的函数里,然后在文件的底部加上:

if __name__ == '__main__':
    main()

这样做还有一个额外的好处,就是你写的这个模块可以被其他人导入使用。

撰写回答