我的情况如下:
value = table.get("Key", index)
。所以对于这样的用户输入:"KeyA + 2*math.abs(KeyC)"
我想运行类似的python代码:
for index in index_list:
answer = table.get("KeyA", index) + 2*math.abs(table.get("Keyc",index))
我想我可以使用我在互联网上找到的一个Python Parser库来解析表达式,但我并不清楚实际上是如何“运行”解析的代码。有什么建议吗?
答案 0 :(得分:1)
如果最终用户可以在图括号{..}
中输入变量,则可以使用str.format
格式化字符串
>>> expression = '{a}*{b}'
>>> values = {'a': 10, 'b': 20, 'c': 30}
>>> expression.format(**values)
'10*20'
对于在表达式中找到的所有键,这里的值字典可能会填充table.get
,例如使用正则表达式:
>>> import re
>>> regexp = re.compile('{(.*?)}')
>>> keys = regexp.findall(expression)
>>> keys
['a', 'b']
>>> table_get = lambda *x: np.random.randint(5)
>>> values = {k: table_get(k) for k in keys}
>>> expression.format(**values)
'1*4'
然后,您可以参考Safe way to parse user-supplied mathematical formula in Python获取安全表达式解析和评估。