= 20), ['i']) 我可以然后直接提供给 constraint。 最佳答案 您正在寻找 eval 的替代方法-6ren">
gpt4 book ai didi

python - 从字符串**正确地**创建一个 lambda 函数

转载 作者:太空狗 更新时间:2023-10-29 17:44:16 29 4
gpt4 key购买 nike

给定一个字符串

"2*(i+j) <= 100"

我要生成对应的lambda函数,

fn = lambda i,j: 2*(i+j) <= 100
  • 我可以用 eval 做到这一点,但我正在寻找一种不那么邪恶的方法。

  • 我找到了

    import ast
    f = ast.Lambda('i,j', '2*(i+j) <= 100')

    但是我还没有弄清楚如何执行结果!

  • 理想情况下,我也想自动提取参数列表 ('i','j') - 现在,我只是在使用 re.findall('\w+'),但我会喜欢能够正确使用 cos 等现有函数,而不是将它们隐藏为“关键字”。


我在看 Is there a Python library for handling complicated mathematical sets (constructed using mathematical set-builder notation)?并试图弄清楚如何最好地将集合构建器符号解析为 lambda 以提供给约束求解器。

我基本上希望 ast.literal_eval 也能识别变量。

理想情况下,给定 i >= 20 我想返回 ((lambda x: x >= 20), ['i']) 我可以然后直接提供给 constraint

最佳答案

您正在寻找 eval 的替代方法,但为什么呢?您正在接受任意代码并执行它,那么为什么不使用 eval?避免 eval 的唯一原因是它很危险,但您最终创建的 lambda 也同样危险。

此外,请记住,you really can't make it safe to do this in CPython

关于python - 从字符串**正确地**创建一个 lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11112046/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com