2011-06-29 36 views
1
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”在程序被定义下面的错误。我在这里错过了什么。Python的投掷奇怪NameError:名称<FUNCTION_NAME>没有定义

NameError: name 'calculateBestNode' is not defined

请原谅我在这里发布大型项目。

+0

我没有看到calculateSelectedNode函数 –

+0

calculateSelectedNode不在您的程序中的任何位置 – Gerrat

+0

我已更新错误消息,在此处发布了错误消息。 –

回答

9

Python程序是从上到下执行的,因此您需要在使用它之前定义函数。一个常见的替代方案是把所有这一切都在一个main功能自动执行的代码,并在文件末尾添加:

if __name__ == '__main__': 
    main() 

这具有额外的优势,你现在已经写了可以通过导入模块其他。

+1

解析不相关:在执行任何一个模块之前,整个模块都会被解析。有意义的是,在正常的程序流中执行'def'时,Python函数就会被创建。 – Duncan

+0

@Duncan更新。 – phihag

3

在您的程序中定义它之前,您尝试使用函数calculateBestNode()。所以解释者不知道它存在。

相关问题