将字符串转换为 Python 中的代数表达式
Convert String to Algebraic Expression in Python
我有一个简单的微分函数
def differentiate(func, num) -> float:
x = num
h = 0.000000001
der = (func(x+h)-func(x))/h
return round(der,4)
print(differentiate(lambda x: x+5,10))
这给出了 1.0
的预期输出,但我想使 func
参数只需要表达式为字符串形式。例如:
print(differentiate('x+5', 10))
这可以吗?最好不用模块的帮助。
这取决于 x 是否始终是您的变量。如果是这种情况,那么您可以使用 python 的 eval 函数来解析您的字符串并将其评估为 python 表达式:
def differentiate(func_x, num) -> float:
x = num
h = 0.000000001
func = lambda x: eval(func_x)
der = (func(x+h)-func(x))/h
return round(der,4)
print(differentiate('x+5', 10))
>>> 1.0
编辑:
正如下面 Serge Ballesta 所指出的,eval 函数可能存在安全问题,因为它允许在 运行 时间不受控制地执行,即它将执行输入中给定的任何代码,因此请仅在您可以信任的情况下使用它你函数的输入。
我有一个简单的微分函数
def differentiate(func, num) -> float:
x = num
h = 0.000000001
der = (func(x+h)-func(x))/h
return round(der,4)
print(differentiate(lambda x: x+5,10))
这给出了 1.0
的预期输出,但我想使 func
参数只需要表达式为字符串形式。例如:
print(differentiate('x+5', 10))
这可以吗?最好不用模块的帮助。
这取决于 x 是否始终是您的变量。如果是这种情况,那么您可以使用 python 的 eval 函数来解析您的字符串并将其评估为 python 表达式:
def differentiate(func_x, num) -> float:
x = num
h = 0.000000001
func = lambda x: eval(func_x)
der = (func(x+h)-func(x))/h
return round(der,4)
print(differentiate('x+5', 10))
>>> 1.0
编辑: 正如下面 Serge Ballesta 所指出的,eval 函数可能存在安全问题,因为它允许在 运行 时间不受控制地执行,即它将执行输入中给定的任何代码,因此请仅在您可以信任的情况下使用它你函数的输入。