Python将函数指定为输入

时间:2018-11-21 10:43:25

标签: python string function callable

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读取为字符串,并在integrate(f,a,b,n)中调用时给出错误。我发现在python中无法将F定义为一个函数,但是在另一个函数中调用一个函数绝对是可能的。那么我如何仍可以使用这种使用输入来指定要使用的功能的方式呢?

错误:

 line 14, in Integrate
    result+=f(x)*h
TypeError: 'str' object is not callable

2 个答案:

答案 0 :(得分:0)

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

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

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

lambda x: 2 * x + 1

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

答案 1 :(得分:-1)

我不知道您是否要使用数学模块中的函数,但是如果是,则可以按以下方式从模块中获取方法:

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

在执行此操作时,您应该使用try除了块周围,以检查给定的函数名是否在数学模块中退出。