关于operator关键字的Python错误

tcp*_*tcp 3 python error-handling python-3.x

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)
Run Code Online (Sandbox Code Playgroud)

错误:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

为什么上面提到的错误?程序在Python 3.3.2上运行.此代码是一个在Python中运行的简单k分类算法.

Nin*_*ker 14

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

通常,您需要明确您使用的任何和所有模块和对象,但builtins(https://docs.python.org/2/library/functions.html)除外.

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

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