为了账号安全,请及时绑定邮箱和手机立即绑定

Python指定函数作为输入

Python指定函数作为输入

Smart猫小萌 2021-08-24 15:25:41
import mathdef g(x):    return x**2+3def Integrate(f, a , b, n):    h=(b-a)/n    result=0    for k in range(n):        x=k*h+h/2        result+=f(x)*h    return resultF=input("f:")A=float(input("a:"))B=float(input("b:"))N=int(input("n:"))print(Integrate(F, A, B, N))每当我尝试运行此代码时,它都会将 F 读取为一个字符串,并在集成(f,a,b,n)中调用时给出错误。我发现python中没有办法将F定义为函数,但是在另一个函数中调用一个函数是绝对可以的。那么我怎么能仍然使用这种方式使用输入来指定要使用的功能呢?错误: line 14, in Integrate    result+=f(x)*hTypeError: 'str' object is not callable
查看完整描述

2 回答

?
冉冉说

TA贡献1877条经验 获得超1个赞

您可以使用 lambda(作为字符串)在控制台上输入函数,并用于eval将字符串转换为实际的函数对象。您的代码如下所示:

F = eval(input("f:"))

在控制台上,如果要集成 function f(x) = 2 * x + 1,则输入:

lambda x: 2 * x + 1

作为字符串。但是,请注意,eval无论您在控制台上输入什么,它都会执行(作为 Python 代码),这可能是一个安全问题,具体取决于您的程序的使用方式。


查看完整回答
反对 回复 2021-08-24
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

我不知道您是否想使用 math 模块中的函数,但是如果是,那么您可以通过字符串从模块中获取方法,如下所示:

function_to_call = getattr(math, f)
result += function_to_call(x) * h

这样做时,你应该用 try except 块包围来检查给定的函数名称是否在数学模块中退出。


查看完整回答
反对 回复 2021-08-24
  • 2 回答
  • 0 关注
  • 275 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号