最近在做一个小的程序,想用sympy处理传入的字符串公式和一串变长的参数值,生成一系列的值。
在给公式赋值时,碰到了一个问题,sympy需要先定义好符号的变量。而符号的变量在写作函数时是不清楚的,如下图:
x, y = symbols('x y')
expr = (x + y)*2*y+y**2
x和y均为符号变量,是由变长参数值确定的。有可能别的计算式需要传入5个符号变量,那我就要列x,y,z,m,n了。如何动态生成变量呢。经过查找,发现可以使用locals函数。废话不多说:
tmp_local = locals()
#根据传入的参数值生成参sympy的参数
for key in paramers.keys():
tmp_local[key] = symbols(key)
这里tmp_local是一个局部变量的字典,这样一来就可以实现动态的设置变量了。
那如何使用这个动态生成的变量呢?如何给这个动态变量赋值呢?上面也提到了,tmp_local是一个字典,我们可以直接通过键来进行访问和赋值操作。如下:
tmp_local['y'] = 'z676'
print(tmp_local['y'])