2012-04-14 1 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') 

Und es ist FehlerWie lade ich den Namespace im Python neu?

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 

Kritiker ist eine kundenspezifische Array

+0

Wo initialisierst du 'Kritiker'? – valdarin

+0

in der recommendations.py, vor sim_distance – MindHacks

+0

Wenn Sie den Code einfügen können, der Kritiker initialisiert, denke ich, wir können herausfinden, wo das Problem liegt. Wie bereits erwähnt, sagt Ihnen der Interpreter, dass er im aktuellen Umfang nichts namens "Kritiker" hat. Ich vermute, dass Sie es innerhalb einer Funktion definieren, das bedeutet, sobald die Funktion zurückkehrt, ist es nicht mehr im Bereich. – valdarin

Antwort

1

Dies hat nichts mit Nachladen Namensräumen zu tun haben. Sie haben einfach critics nicht definiert.

+0

Ich habe in der recommendations.py geschrieben, vor dem sim_distance(). Soll ich es an anderer Stelle definieren? – MindHacks

+1

@MindHacks: vielleicht meintest du Empfehlungen.Kritik? – j13r

+0

Ja, ich habe mich mit dem Problem befasst. Danke! ~ – MindHacks

0

Dies sieht aus wie es ist wahrscheinlich ein Problem Bereich. Wenn Sie Kritiker innerhalb einer anderen Funktion definieren, werden Kritiker nur innerhalb dieser Funktion existieren. Sie verweisen hier auf Kritiker im Hauptbereich der Funktion, so dass Sie Kritiker entweder von der Funktion, die sie erstellt, zurückgeben müssen oder sie (nicht so ideal) zunächst im globalen Gültigkeitsbereich definieren.

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

    return critics 

critics = initCritics() 

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

Danke! Es ist hilfreich. – MindHacks