重新加载Python模块
我是python新手,在编译我目前正在阅读的《编程集体智能》一书中的示例代码时遇到了一个问题 我首先创建了一个名为重新加载Python模块,python,Python,我是python新手,在编译我目前正在阅读的《编程集体智能》一书中的示例代码时遇到了一个问题 我首先创建了一个名为recommendations.py的文件,并添加了一个包含电影数据和人们对电影评级的字典 然后在python intrepreter中 >> from recommendations import critics >> critics['SomeName'] I get the data from the dictionary. 现在,书籍要求我添
recommendations.py
的文件,并添加了一个包含电影数据和人们对电影评级的字典
然后在python intrepreter中
>> from recommendations import critics
>> critics['SomeName']
I get the data from the dictionary.
现在,书籍要求我添加代码
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+sum_of_squares)
然后在intrepreter中,我被要求重新加载(推荐)
,但我得到名称错误:“推荐”未定义
问题是什么?py包含批评家词典和代码。来自建议导入的有效,但重新加载不起作用。我是python新手 reload()
在模块上工作(例如,recommendations.py)
要重新加载建议
,可以执行以下操作:
import recommendations
# use recommendations.critics['name']
然后重新加载(建议)
问题是,当您从推荐导入批评者时,您导入的是
批评者
,这可能只是您的recommunications.py文件中的一个值,而不是一个模块(不是推荐文件夹中的评论家.py文件)<代码>重新加载对模块起作用,对模块内的对象不起作用我认为这里有一个概念上的问题<代码>建议.py是一个文件。从您的代码使用它的方式,我们可以推断它定义了一个模块源文件。您可以通过编写导入建议
加载模块-然后在会话中有一个名为“建议”的模块对象。如果这样做,还可以使用重新加载(建议)
重新加载模块。请注意,重新加载仅适用于以前从其模块源文件导入的模块对象。它不会第一次读取文件并导入模块。看看它是怎么解释的
在您的情况下,您尚未导入模块-您已使用“建议导入批评者”中的行导入了模块的特定组件(批评者
)。因此,解释器会话不包含任何名为推荐的内容
,并通过给出您看到的错误(namererror:“推荐”未定义
)来告诉您
我的猜测是,前面代码中的某个地方的书(我没有访问它)告诉您键入导入建议
。您必须在键入reload(建议)的同一解释器会话中执行此操作,以便重新加载工作
编辑:
我刚刚注意到了同一个问题——书中似乎有一个问题,如果你只是照着它去做,它可能不起作用。我确实有recommunications.py文件。所以reload()必须正常工作?根据python文档
reload
“如果一个模块使用From…import…,从另一个模块导入对象,那么为另一个模块调用reload()不会重新定义从它导入的对象-一种方法是重新执行From语句,另一种方法是使用import和限定名(module.*name*)。@bakkal Jup,我看到了它,并想从python文档中添加原因,以确保答案的完整性。请随意编辑答案!除非网站不允许,否则我将使用文档中的引用对其进行编辑