关于operator关键字的Python错误

时间:2013-10-23 21:59:23

标签: python python-3.x error-handling

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

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

1 个答案:

答案 0 :(得分:14)

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

作为一项规则,您需要明确说明您使用的所有模块和对象,builtinshttps://docs.python.org/2/library/functions.html)除外。

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

关于进口的高级提示/编辑: 您可能想要使用KNN.operator。它在那里可用,因为它是由KNN导入的。然而,这几乎总是一个令人遗憾的决定,因为混淆了图片:这是一个特殊的模块吗?如果是这样,它的界面是什么?保存可爱,明确。