我从文本 e-g s = "a&(b|c)"
中提取了一个数学字符串,并且我想使用 eval(s)
但在此之前,我必须为变量赋值,例如:
a, b, c = somefuction()
我如何动态地执行此操作
r = re.findall("\w+", s)
r[0], r[1], r[2] = somefunction()
然后将这些值传回变量并对其使用eval()
。
我的最终输出应该根据 a、b、c 的值给出 True 或 False
最佳答案
假设 findall
确实正确找到了您的变量,并且您的函数返回了适当的元组,那么您可以使用 exec
来设置变量:
r = re.findall("\w+", s)
vars = ', '.join(r)
exec(vars + ' = somefunction()')
在您的示例中,这将构造字符串 a, b, c = somefunction()
并执行它,从而在当前命名空间中设置变量。
由于您在评论中指出变量的数量可能会有所不同,因此您可能希望将该数字发送到您的函数:
exec('{} = somefunction({})'.format(vars, len(r)))
或者,如果您的函数始终返回相同数量的元素,但根据提取的数学表达式可能不会使用一个或多个元素,您可能需要附加或前置 _
(下划线)到 vars
字符串中以取代未使用的值。
关于python - 如何动态更改字符串中变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63652108/