Python(SymPy,SciPy),从字符串创建符号lambda
我一直在努力获取方程的文本输入,并将其作为定积分进行计算。我需要一个可调用函数来传递给Python(SymPy,SciPy),从字符串创建符号lambda,python,lambda,scipy,integral,Python,Lambda,Scipy,Integral,我一直在努力获取方程的文本输入,并将其作为定积分进行计算。我需要一个可调用函数来传递给scipy.integrate eq = "x**2" func = lambda x: eq func(2) # outputs: # x**2 # but if I: func = lambda x: x**2 func(2) # outputs: # 4 不确定,但也许你在找 eq = "x**2" func = eval("lambda x: " + eq) 请注意,如果eq来自不受信任的
scipy.integrate
eq = "x**2"
func = lambda x: eq
func(2)
# outputs:
# x**2
# but if I:
func = lambda x: x**2
func(2)
# outputs:
# 4
不确定,但也许你在找
eq = "x**2"
func = eval("lambda x: " + eq)
请注意,如果
eq
来自不受信任的来源(例如用户输入),则使用eval()
是危险的。您需要使用eval将eq作为代码运行,而不是将其视为字符串
eq = "x**2"
func = lambda x: eval(eq)
func(2)
# outputs:
# 4
可能就是你要找的。它将字符串表达式转换为sympy对象
例如:
import sympy as sp
f=sp.sympify('x**2+sin(y)')
您可以使用将Symphy对象转换为可调用函数。尝试或寻找eval()和symphy.sympify().evalf()的更安全的替代方法。我不断地遇到以下语法错误,并不断地试图找出原因:
E="2x+1"
F=lambda x: (x, eval(E)) # to get an xy coordinate
但当我将E改为:
E="2*x+1"
新手错误。:) 您的第二个代码段根本不使用
sympy
。来自sympy import Symbol的行;x=符号('x')
无效。哈哈。哇,接得好,我从来没有意识到。我觉得很傻。谢谢尽管如此,我的问题仍然存在。仅供参考:虽然这不是您希望传递给scipy.integrate的内容,但从字符串中获取sympy表达式的方法是使用sympify
:本文介绍了如何使用eval
安全地处理用户输入:您可以将x和y声明为符号,而不是自动换行,例如x,y=sympy.symbols('xy')
,然后使用subs
调用evalf
,并传入参数,例如f.evalf(subs={x:1.23,y:4.56})
返回0.524488748060870