Я сохраняю свои пользовательские функции в отдельном модуле, который я могу вызвать, когда мне нужно. Одна из моих новых функций использует 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')
Я пытался импортировать его внутри функции, внутри модуля, так и внутри файла, в котором я звоню его - все без удачи. Если я импортирую его в консоль, то это будет хорошо. Даже после того, как он был импортирован в консоль, если я запустил его внутри файла, над которым я снова работаю, он дает ту же ошибку.
Импорт 'itertools' в том же модуле был вашей функцией. –
Вам нужно импортировать itertools в файл, который его использует. Если вы импортируете этот файл, у него есть собственное пространство имен. –
Я попытался импортировать его в свой модуль, но он все же произвел ошибку. Я также попытался импортировать его в файл, который его использует, - все еще ошибка. – Adam