名称错误:未定义全局名称“operator”

2024-06-29 00:52:07 发布

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

import KNN
def c(i,d,l,k):
    dss=d.shape[0]
    dm=tile(i,(dss,1))-d
    sqm=dm**2
    sqd=sqm.sum(axis=1)
    dist=sqd**0.5
    sDI=dist.argsort()
    clc={}
    for i in range(k):
        vl=l[sDI[i]]
        clc[vl]=clc.get(vl,0)+1     
    sCC=sorted(clc.items(),key=operator.itemgetter(1),reverse=True)
    return sCC[0][0]

c([0,0],g,l,3)

错误:

Traceback (most recent call last):
  File "<pyshell#32>", line 1, in <module>
    c([0,0],g,l,3)
  File "<pyshell#31>", line 12, in c
    sCC=sorted(clc.items(),key=operator.itemgetter(1),reverse=True)
NameError: global name 'operator' is not defined

KNN包含以下代码:

from numpy import *
import operator

def createdataset():
    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels

为什么会出现上述错误?程序在Python3.3.2上运行。这段代码是在Python中运行的一个简单的k分类算法。


Tags: inimportdistdefdmoperatorsortedknn
1条回答
网友
1楼 · 发布于 2024-06-29 00:52:07

您需要import operator到本地命名空间中;import KNN也不会导入它导入的子模块。

一般来说,除了builtinshttps://docs.python.org/2/library/functions.html)之外,您需要明确说明所使用的任何和所有模块和对象。

与其他一些语言不同,没有隐式导入。

关于进口的高级提示/编辑: 你可能想用KNN.operator。它在那里是可用的,因为它是由KNN导入的。然而,这几乎总是一个令人遗憾的决定,因为混淆了画面:这是一个特殊的模块吗?如果是,它的接口是什么?别那么可爱,直说吧。

相关问题 更多 >