#python #numpy #eval
#python #numpy #eval
Вопрос:
x = 0
x2 = 0
f = "numpy.sin(x)"
e1 = eval(f)
e2 = eval(f, {"x":x2})
Строка для e2 (но не e1) выдает ошибку:
NameError: name 'numpy' is not defined
Почему?
Комментарии:
1. В e2 вы предоставляете глобальную среду, которая не знает о numpy.
2. Потому что вы вставляете глобальный словарь, у которого нет этого имени … так, может быть, вы хотите
eval(f, {"x":x2, "numpy":nump})
?
Ответ №1:
Поскольку в e1 вы не переопределяете глобальные переменные, numpy существует. В e2 это так, поэтому ваш импорт не может быть виден интерпретатору. Просто передайте numpy как переменную.
e2 = eval(f, {'numpy': numpy, 'x':x2})
Комментарии:
1. Спасибо, но это все равно приводит к «NameError: имя ‘numpy’ не определено». Я решил свою проблему, заменив «numpy.sin (x)» на «__import__(‘numpy’).sin (x)».
Ответ №2:
Я решил это, заменив:
f = "numpy.sin(x)"
с:
f = "__import__('numpy').sin(x)"