Python 在模块内部使用时未定义itertools

Python 在模块内部使用时未定义itertools,python,function,module,anaconda,itertools,Python,Function,Module,Anaconda,Itertools,我将自定义函数保存在一个单独的模块中,需要时可以调用该模块。我的一个新函数使用itertools,但我一直收到一个名称错误 NameError: name 'itertools' is not defined 真奇怪。我可以在控制台中导入itertools,但是当我调用我的函数时,我得到了一个名称错误。通常我可以在自定义函数中使用来自其他库(pandas、sklearn等)的函数,只要我先导入库就可以了 但是,如果我在控制台中导入itertools,将我的函数复制并粘贴到控制台中,然后调用该函

我将自定义函数保存在一个单独的模块中,需要时可以调用该模块。我的一个新函数使用itertools,但我一直收到一个名称错误

NameError: name 'itertools' is not defined
真奇怪。我可以在控制台中导入itertools,但是当我调用我的函数时,我得到了一个名称错误。通常我可以在自定义函数中使用来自其他库(pandas、sklearn等)的函数,只要我先导入库就可以了

但是,如果我在控制台中导入itertools,将我的函数复制并粘贴到控制台中,然后调用该函数,它就可以正常工作

这让我发疯,但我想也许我只是不理解模块的规则或其他东西

这是我在模块中使用的函数。它只是从一个sklearn示例中复制和粘贴:

import itertools    
def plot_confusion_matrix(cm, classes,
                              normalize=False,
                              title='Confusion matrix',
                              cmap=plt.cm.Blues):
        import itertools
        plt.imshow(cm, interpolation='nearest', cmap=cmap)
        plt.title(title)
        plt.colorbar()
        tick_marks = np.arange(len(classes))
        plt.xticks(tick_marks, classes, rotation=45)
        plt.yticks(tick_marks, classes)

        if normalize:
            cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]
            print("Normalized confusion matrix")
        else:
            print('Confusion matrix, without normalization')

        print(cm)

        thresh = cm.max() / 2.
        for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
            plt.text(j, i, cm[i, j],
                     horizontalalignment="center",
                     color="white" if cm[i, j] > thresh else "black")

        plt.tight_layout()
        plt.ylabel('True label')
        plt.xlabel('Predicted label')
我试着在函数、模块和调用它的文件中导入它,但都没有成功。如果我在控制台中导入它,就可以了。即使在控制台中导入它之后,如果我在正在处理的文件中再次运行它,也会出现相同的错误。

它现在可以工作了

NameError: name 'itertools' is not defined
重要教训: 如果编辑模块,则必须关闭并重新打开spyder/ipython/where。仅仅重置内核是不够的。我真傻,我知道,但也许这个答案能帮别人节省时间

您可以先使用从itertools导入的产品,然后将itertools.product更改为simply产品。那应该行。

你只要改变一下就行了
对于itertools.product中的i,j(范围(cm.shape[0]),范围(cm.shape[1]):

致:

范围内的i(厘米形状[0]):

对于范围内的j(cm.shape[1]):

在同一模块中导入
itertools
函数是否处于活动状态您需要在使用它的文件中导入itertools。如果导入该文件,它有自己的名称空间。我尝试在模块中导入该文件,但仍然产生错误。我还尝试在使用它的文件中导入它-仍然是一个错误。如果您尝试将itertools导入两个模块,但仍然出现错误,请提供一个最小的工作示例代码,让我们看看您的代码示例不导入itertools。确保你的例子是a。我发现任何人都不可能从中受益,但让我们抱最好的希望:)我很高兴你最终找到了答案。这不是问题的重点。关键是为什么没有加载
itertools