具有在运行时执行的用户定义表达式的python类

时间:2013-07-22 10:45:57

标签: python lambda

我想构建一个类,它能够在运行时获取一些用户定义的表达式,并根据它们和类拥有的一些预定义变量进行计算,例如:用户将知道变量a,b,c& d存在:

伪代码:

>>> foo = myclass()

>>> foo.a = 2
>>> foo.b = 3
>>> foo.expression = 'a + b'
>>> foo.run_expression()
5

>>> foo.expression = 'a * b'
>>> foo.run_expression()
10

我已经探索过lambda函数,但是他们似乎需要我每次创建一个新函数时明确定义lambda函数的输入是什么意思,这意味着他们希望从用户那里获得大量的锅炉板输入更新lambda,因为我知道输入总是一组预定义的变量。

有没有人有过做类似事情的经验,或者对如何构建这样的程序有任何想法?

1 个答案:

答案 0 :(得分:2)

要将表达式计算为Python,请使用eval() function,将vars(self)作为命名空间传递:

def run_expression(self):
    return eval(self.expression, vars(self))

知道这会让你了解攻击向量,恶意用户可以执行任意代码并更改程序以执行完全不同的操作。

演示:

>>> class Foo(object):
...     def run_expression(self):
...         return eval(self.expression, vars(self))
... 
>>> f = Foo()
>>> f.a = 2
>>> f.b = 3
>>> f.expression = 'a + b'
>>> f.run_expression()
5