繁体   English   中英

如何将算术表达式转换为Python算术函数?

[英]How to transform a arithmetic expression to a Python arithmetic function?

假设我在Z3中进行了算术比较。 按照Z3py的语法,这是:

e=z3.Int('x') <=3

是否有一种简单的方法(而不是乏味的,逐个案例的解析过程)将Z3表达式(以Z3py表达)转换为Python函数,例如:

def e(x):
  return x<=3

谢谢。

我不太了解z3,但是您可以尝试以下示例:

import operator
from functools import partial    

f_dict = {"e"+str(i):f for i,f in 
          enumerate([partial(op, n) 
                     for n in range(10) 
                         for op in [operator.lt ,operator.le , operator.eq]])}

locals().update(f_dict)

在这里,我将自动创建函数,并自动组合从0到9的数字,如果小于,小于等于或相等,则比较另一个数字。 让我们将其分为几个概念:

使用的操作员列表

[operator.lt ,operator.le , operator.eq]

泛型函数绑定到一个名称,该名称采用数字并使用运算符和所理解的数字:

lambda x: op(x, n)

然后,我们只需要将它们绑定到字典中的名称(dict理解),然后使用它来更新本地dict。

locals().update(f_dict)

在控制台上工作:

>>> import operator
f_dict = {"e"+str(i):f for i,f in enumerate([lambda x: op(x, n) for n in range(10) for op in [operator.lt ,operator.le , operator.eq]])}
locals().update(f_dict)

>>> e1(3)
False

如果正确抬起z3对象以供操作员使用,则此功能甚至应适用于z3对象。

我们没有公开任何反射工具(从python到Z3或其他方式),因此您将不得不遍历表达式并确定要生成本地python时如何反映它们。

或者,您可以使用Z3公开的简化程序来评估表达式。 因此,如果您在公式中具有自由变量的值,则可以使用替代函数(也通过Python公开)用这些值替换它们,然后调用simple()方法,然后检索python值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM