2012-04-14 25 views
0
from math import sqrt 
def sim_distance(prefs,person1,person2): 
    si={} 
    for item in prefs[person1]: 
      if item in prefs[person2]: 
       si[item]=1 
    if len(si)==0: return 0 
    sum_of_squares=sum([ pow (prefs[person1] [item] - prefs[person2][item],2) 
        for item in prefs[person1] if item in prefs[person2]]) 
    return 1/(1+sqrt(sum_of_squares)) 

reload(recommendations) 
recommendations.sim_distance(critics,'Lisa Rose','Gene Seymour') 

而且它的錯誤如何重新加載python中的名稱空間?

Traceback (most recent call last): 
    File "<pyshell#2>", line 1, in <module> 
    recommendations.sim_distance(critics,'Lisa Rose','Gene Seymour') 
NameError: name 'critics' is not defined 

批評是一個自定義的數組

+0

你在哪裏初始化「評論家」? – valdarin 2012-04-14 16:17:39

+0

in recommendations.py,before sim_distance – MindHacks 2012-04-14 16:23:41

+0

如果你可以包含初始化批評者的代碼,我想我們可以找出問題所在。正如下面已經提到的那樣,解釋者告訴你,它在當前範圍內沒有任何名爲'critics'的東西。我猜你是在一個函數中定義它,這意味着一旦函數返回它不在範圍內。 – valdarin 2012-04-14 16:27:13

回答

1

這沒有什麼關係重裝命名空間。你根本沒有定義critics

+0

我在sim_distance()之前寫了recommendations.py,我應該在其他地方定義它嗎? – MindHacks 2012-04-14 16:25:46

+1

@MindHacks:也許你的意思是建議。 – j13r 2012-04-14 16:57:29

+0

是的,我已經處理了這個問題。謝謝〜 – MindHacks 2012-04-15 05:30:01

0

這看起來可能是範圍問題。如果你在不同的功能中定義評論,那麼批評者將只存在於該功能中。你在這個函數的主要範圍中引用評論者,所以你需要從創建它的函數返回批評者,或者(不那麼理想)在全局範圍內定義它。

def initCritics(): 
    critics = [] 
    # make some critics 

    return critics 

critics = initCritics() 

recommendations.sim_distance(critics,'Lisa Rose','Gene Seymour') 
+0

謝謝!這很有幫助。 – MindHacks 2012-04-14 16:59:57

相關問題