如何在python中重新加载命名空间?

时间:2012-04-14 16:08:04

标签: python reload

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')

这是错误

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

评论家是一个自定义数组

2 个答案:

答案 0 :(得分:1)

这与重新加载名称空间没有任何关系。您根本没有定义critics

答案 1 :(得分:0)

这看起来可能是范围问题。如果你在不同的功能中定义批评者,那么批评者将只存在于该功能中。您在这里引用了函数主要范围内的批评者,因此您需要从创建它的函数中返回批评者,或者(不是理想的)最初在全局范围内定义它。

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

    return critics

critics = initCritics()

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