使用Python开发推荐引擎时,在赋值错误之前引用了局部变量“index_3”

2024-10-03 17:27:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个推荐引擎,向当地零售连锁店推荐商品,我使用的代码是我在使用电影镜头数据集开发电影推荐系统时学到的,而用于推荐电影的代码现在似乎不起作用了。在

获取三级项目之间相关性的函数

def get_movie_similarity(level3Id):  
    index_three = list(index_three).index(level3Id)
    return corr_matrixthree[index_three]

一个函数,通过根据用户的皮尔逊核心评分,按升序排列与用户购买的ITME相似的项目,从而获得与用户购买最多的ITME相似的项目

^{pr2}$

我生成的相似度矩阵是用户和他们购买的商品之间的相似度矩阵,其值为您在每个商品上花费的金额。

sample_user = 42140122376
merged[merged.cust_id==sample_user].sort_values(by=['amount_extended'], ascending=False)


sample_user_movies = merged[merged.cust_id==sample_user].level3Id.tolist()  
recommendations = get_movie_recommendations(sample_user_movies)

#We get the top 20 recommended movies
recommendations.level3Id.head(20)

我得到的错误是:

local variable 'index_three' referenced before assignment

索引三是数据集中所有项目的索引然而,corr峎u matrix 3是使用pearson得分生成的itmes之间的相似性矩阵。合并是我的数据集

你能帮帮我吗?

我可以分享我在jupyter笔记本上的代码!在


Tags: 数据sample项目代码用户getindex电影
2条回答

在您定义的每个函数中,都使用index_3变量。在

在函数get_movie_similarity中,您使用的是像-

index_three = list(index_three).index(level3Id)

要使上述语句有效,index_tree中应该有一些值。 所以至少要将index_three传递给函数,或者尽可能使其全局化。在

我上面解释的例子:

^{pr2}$

当我执行上述程序时,会出现如下错误:

C:\Users\dinesh\Desktop>python multi.py
Traceback (most recent call last):
  File "multi.py", line 358, in <module>
    get_str()
  File "multi.py", line 355, in get_str
    val =  val + "_new"
UnboundLocalError: local variable 'val' referenced before assignment

和你得到的一样。我将上述错误解决如下:

def get_str(val):
    val =  val + "_new"
    return val

print get_str("Dinesh")

C:\Users\dinesh\Desktop>python multi.py
Dinesh_new

注意:不建议将变量设为全局变量。在

为此,您需要了解变量范围是如何工作的。看看这个!在

def my_func():
    index3 =5000
    print(index3)

index3=10;
print(index3)
my_func()

输出:

^{pr2}$

注意:即使有两个index3你可能认为它们是一样的。但它们是不是

my_func中的index3是一个局部变量。而程序中的那个(不在函数中的那个)是不同的!。所以在上面的代码中,首先print(index3)在我的代码中打印index3(不是在任何函数中..只在我的程序中),然后my_func()被调用,my_func()内的{}打印局部变量index3

看看这个!在

def my_func():
    print(index3)

index3=10;
print(index3)
my_func()

输出:

10
10

现在看两次index3,它是相同的10,这意味着它打印了两次全局变量。在

现在你的问题来了!公司名称:

def my_func():
    index3 =index3+1

index3=10;
print(index3)
my_func()

输出:

10
Traceback (most recent call last):
  File "/home/mr/func.py", line 6, in <module>
    my_func()
  File "/home/mr/func.py", line 2, in my_func
    index3 =index3+1
UnboundLocalError: local variable 'index3' referenced before assignment

为什么?在

因为这个index3 =index3+1,所以当它看到一个index3=时,它就创建了一个局部变量。所以index3=0意味着给局部变量赋值0。在

但是index3 =index3+1会把它搞糊涂!它认为

等等,你想让我把局部变量index3赋值为局部变量index3+1?但你还没申报呢!在

def my_func():
    global index3
    index3 =index3+1
    print(index3)

index3=10
print(index3)
my_func()
print(index3)

输出:

10
11
11

现在它在函数中取全局值,然后它就改变了。所以index3被函数改变了。在

注意:使用全局变量是不好的编码实践。在

def getIndex3():
    return index3

def my_func():
    index3 = getIndex3()
    index3 =index3+1
    print(index3)

index3=10
print(index3)
my_func()
print(index3)

现在输出:

10
11
10

你知道差别对吗?这就是你的程序显示错误的原因。这就是local variable 'index_three' referenced before assignment

相关问题 更多 >