我如何懒惰评估python评估表达中的变量



场景是我的用户可以提供表达式字符串以进行评估。可能是:

"power=(x**2+y**2)**0.5"

然后,我获得了带有标签的数据流。例如:

x ; y ; z
1 ; 2 ; 3
1 ; 3 ; 4

我将输出这样的数据流:

x ; y ; z ; power
3 ; 4 ; 3 ; 5.0 
6 ; 8 ; 4 ; 10.0

,但我还将为用户提供使用更多"昂贵"变量(例如'sum':

"mysum = sum + 5"

,但是我不想计算"总和",除非需要

那么,我如何最好地评估表达式中的变量?性能很重要,但不是太过分了。

清晰易理解的代码是最重要的

我之前曾尝试提出这个问题 - 如何检测python评估表达式中的变量。但显然不是很简洁

我目前正在使用eval和名称空间。也欢迎其他方法。

另一种可以提供更好性能的方法是检测用户表达式中所有包含的变量,以便事先知道需要哪些预算变量。

一个很好的答案也将不胜感激

问题的最佳解决方案也发布在链接的问题中:

import ast
def varsInExpression(expr):
    st = ast.parse(expr)
    return set(node.id for node in ast.walk(st) if type(node) is ast.Name)

这是AndréLaszlo

发布的

它允许我在接收任何数据之前初始化所需的VAR和功能,并且仅预先计算使用的"智能"变量

懒惰评估部分尚未收到一个好的答案

最新更新