Python指定函数作为输入
每当我尝试运行这段代码时,它都会将F读取为字符串,并在integrate(F,a,b,n)中调用时给出一个错误。我发现在python中没有办法将F定义为函数,但是在另一个函数中调用函数是完全可能的。那我怎么还能用这种方式使用输入来指定要关闭的函数呢 错误:Python指定函数作为输入,python,string,function,callable,Python,String,Function,Callable,每当我尝试运行这段代码时,它都会将F读取为字符串,并在integrate(F,a,b,n)中调用时给出一个错误。我发现在python中没有办法将F定义为函数,但是在另一个函数中调用函数是完全可能的。那我怎么还能用这种方式使用输入来指定要关闭的函数呢 错误: 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):
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))
您可以使用lambda(作为字符串)在控制台上输入函数,并使用
eval
将字符串转换为实际的函数对象。您的代码如下所示:
line 14, in Integrate
result+=f(x)*h
TypeError: 'str' object is not callable
lambda x: 2 * x + 1
在控制台上,如果您想集成函数f(x)=2*x+1
,您需要输入:
F = eval(input("f:"))
一串。但是,请注意,
eval
将执行(作为Python代码)您在控制台上输入的任何内容,这可能是一个安全问题,具体取决于您的程序的使用方式。我不知道您是否要使用math module中的函数,但如果是,则可以通过如下字符串从模块中获取方法:
line 14, in Integrate
result+=f(x)*h
TypeError: 'str' object is not callable
lambda x: 2 * x + 1
执行此操作时,应使用try-except块来检查给定的函数名是否存在于数学模块中。@VasilisG。我很确定OP希望
f(x)
,在x
点计算函数f
,以估计积分。你能为你的问题提供一些示例输入数据吗?要安全地做到这一点可能相当棘手,你需要编写一个解析器。非安全方式(非外用)是exec(F)
,现在如果input(“F:”)
wasF=lambda x:x*2
您将拥有一个工作函数只有在math
模块中定义了要集成的函数时,此功能才起作用。这不适用于像f(x)=2*x这样的任意函数。