Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python指定函数作为输入_Python_String_Function_Callable - Fatal编程技术网

Python指定函数作为输入

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):

每当我尝试运行这段代码时,它都会将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):
        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:”)
was
F=lambda x:x*2
您将拥有一个工作函数只有在
math
模块中定义了要集成的函数时,此功能才起作用。这不适用于像
f(x)=2*x这样的任意函数。