将带有导入模块函数的表达式传递给 eval() 时出错

Error passing to eval() an expression with a function from an imported module

我对 Python 比较陌生,但我对这个问题感到困惑。谁能帮帮我?

我已经定义了一个函数来绘制一个数学函数,其表达式作为字符串传递:

def plot_function(str_function,a,b):
    import matplotlib.pyplot as plt
    import numpy as np
    
    f = lambda x: eval(str_function)
    x=np.linspace(a,b,200)  
    y=f(x)
    plt.plot(x,y)
    plt.show()

通过以下方式调用它效果很好:

plot_function('2*x',-10,10)

但它会产生错误 name "np" is not defined 通过以下方式调用它:

plot_function('np.sin(x)',-10,10)

谁能解释一下原因?谢谢

eval 内置函数给出两个这样的参数

eval(expression, [globals[, locals]])

如果第二个参数不存在默认值设置为全局并且你在本地函数中将numpy import定义为np那么np在全局中不存在