>> import re >>> re.fi-6ren">
gpt4 book ai didi

来自数学表达式字符串的 Python 函数

转载 作者:行者123 更新时间:2023-12-03 23:06:59 25 4
gpt4 key购买 nike

有没有办法从字符串创建python函数?例如,我将以下表达式作为字符串:
dSdt = "-1* beta * s * i"
我找到了一种标记它的方法:

>>> import re
>>> re.findall(r"(\b\w*[\.]?\w+\b|[\(\)\+\*\-\/])", dSdt)
['-', '1', '*', 'beta', '*', 's', '*', 'i']

现在我想(不知何故 - 这是我不知道的部分)将其转换为具有相同行为的内容:

def dSdt(beta, s, i):
return -1*beta*s*i

我想过类似 eval(dSdt) 的事情,但我希望它更通用(参数 betasi 必须提前知道存在)。

一些关闭请求已链接到 this question用于评估字符串中的数学表达式。这与这个问题不太一样,因为我希望从该字符串定义一个函数。

最佳答案

一种方法,使用 exec 从字符串中定义一个新函数

 expr = "-1* beta * s * i" 
name = "dSdt"
params = ["beta","s","i"] # Figure out how to build this array from expression
param_str = ",".join(params)
exec (f"def {name}({param_str}): return {expr}")

dSdt(1,2,3)

Out[]: -6

如果你不关心定义一个可重用的函数,也可以将 eval 与全局对象参数一起使用。
 expr = "-1* beta * s * i" 
param= {"beta":1, "s":2, "i":3} # Find way to build this.
eval(expr,param)


Out[]: -6

关于来自数学表达式字符串的 Python 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61948141/

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