Python指定函数作为输入

import math


def g(x):

    return x**2+3


def 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 result


F=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)*h

TypeError: 'str' object is not callable


Smart猫小萌
浏览 276回答 2
2回答

冉冉说

您可以使用 lambda(作为字符串)在控制台上输入函数,并用于eval将字符串转换为实际的函数对象。您的代码如下所示:F = eval(input("f:"))在控制台上,如果要集成 function f(x) = 2 * x + 1,则输入:lambda x: 2 * x + 1作为字符串。但是,请注意,eval无论您在控制台上输入什么,它都会执行(作为 Python 代码),这可能是一个安全问题,具体取决于您的程序的使用方式。

qq_笑_17

我不知道您是否想使用 math 模块中的函数,但是如果是,那么您可以通过字符串从模块中获取方法,如下所示:function_to_call = getattr(math, f) result += function_to_call(x) * h这样做时,你应该用 try except 块包围来检查给定的函数名称是否在数学模块中退出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python