如何在python中定义一个函数,该函数将函数及其';这是我们的论点并应用于它。

如何在python中定义一个函数,该函数将函数及其';这是我们的论点并应用于它。,python,math,physics,numerical-methods,Python,Math,Physics,Numerical Methods,我想定义一个函数,它将参数作为一个数学函数,它的参数和迭代次数(我用不动点定理寻找函数的零点)。 我知道如何寻找零,但我不知道如何让我的数学方程从函数本身获取参数 def f(function,x,iterations) 当我尝试调用函数时,例如: f(x**2+3,-1,20) 该函数为x(我已经为另一段代码定义了)获取了已有的变量,而不是我在这里寻找的x=-1。 我想要的结果是+4 我怎样才能解决这个问题?我试图在我的函数中定义另一个函数,但我被明确要求为我的函数提供这三个参数 谢谢你的

我想定义一个函数,它将参数作为一个数学函数,它的参数和迭代次数(我用不动点定理寻找函数的零点)。 我知道如何寻找零,但我不知道如何让我的数学方程从函数本身获取参数

def f(function,x,iterations)
当我尝试调用函数时,例如:

f(x**2+3,-1,20)
该函数为x(我已经为另一段代码定义了)获取了已有的变量,而不是我在这里寻找的x=-1。 我想要的结果是+4

我怎样才能解决这个问题?我试图在我的函数中定义另一个函数,但我被明确要求为我的函数提供这三个参数


谢谢你的帮助

将函数存储到字符串中,这样“x**2”,然后在函数内部使用eval方法使用函数。eval()。eval()

在python中,函数本身就是第一类对象,可以作为参数传递。您可以在外部定义基函数

def my_f(x):
    return x**2+3

def my_functor(f, x, iterations):
    for i in xrange(iterations):
        x = f(x)
    return x

print my_functor(my_f, -1, 20)
也许您可以找到一种更为隐式的方法,通过使用装饰符来定义同一个函子

def iterated(fn):
    """
    A decorator to make a function iterate over its outputs.
    """
    def iterated_func(*args, **kwargs):
        x = args[0]
        iterations = args[1]
        for i in xrange(iterations):
            x = fn(x)
        return x
    return iterated_func

@iterated
def my_g(x):
    return x**2+3

在这种情况下,
my_g(3,1)=my_f(3)
将计算为
True
。也就是说,通过在您定义的函数上添加decorator
@iterated
,您可以更改其行为以获得作为参数的迭代次数。

在python中,函数本身就是一类对象,可以作为参数传递。您可以在外部定义基函数

def my_f(x):
    return x**2+3

def my_functor(f, x, iterations):
    for i in xrange(iterations):
        x = f(x)
    return x

print my_functor(my_f, -1, 20)
也许您可以找到一种更为隐式的方法,通过使用装饰符来定义同一个函子

def iterated(fn):
    """
    A decorator to make a function iterate over its outputs.
    """
    def iterated_func(*args, **kwargs):
        x = args[0]
        iterations = args[1]
        for i in xrange(iterations):
            x = fn(x)
        return x
    return iterated_func

@iterated
def my_g(x):
    return x**2+3

在这种情况下,
my_g(3,1)=my_f(3)
将计算为
True
。也就是说,通过在您定义的函数上添加decorator
@iterated
,您可以更改其行为以获得迭代次数作为参数。

您可以使用
sympy
安全地计算数学表达式

首先,安装
sympy

pip install sympy
然后,你可以这样起诉:

import sympy as sy

def mathfunc(formula, **kwargs):
    expr = sy.sympify(formula)
    return expr.evalf(subs=kwargs)


mathfunc(formula="x**2+3", x=-1, iterations=20)
>>> int(myformula(formula="x**2+3", x=-1, iterations=20))
4
您可以将其转换为
int
,如下所示:

import sympy as sy

def mathfunc(formula, **kwargs):
    expr = sy.sympify(formula)
    return expr.evalf(subs=kwargs)


mathfunc(formula="x**2+3", x=-1, iterations=20)
>>> int(myformula(formula="x**2+3", x=-1, iterations=20))
4
或者在
mathfunc
return
语句中添加
int()


请注意,我没有使用
迭代
,因为您没有提到要使用它做什么,但您可以在
mathfunc
中使用它,如您所愿。

您可以使用
sympy
安全地计算数学表达式

首先,安装
sympy

pip install sympy
然后,你可以这样起诉:

import sympy as sy

def mathfunc(formula, **kwargs):
    expr = sy.sympify(formula)
    return expr.evalf(subs=kwargs)


mathfunc(formula="x**2+3", x=-1, iterations=20)
>>> int(myformula(formula="x**2+3", x=-1, iterations=20))
4
您可以将其转换为
int
,如下所示:

import sympy as sy

def mathfunc(formula, **kwargs):
    expr = sy.sympify(formula)
    return expr.evalf(subs=kwargs)


mathfunc(formula="x**2+3", x=-1, iterations=20)
>>> int(myformula(formula="x**2+3", x=-1, iterations=20))
4
或者在
mathfunc
return
语句中添加
int()


请注意,我没有使用
iterations
,因为您没有提到您希望如何使用它,但是您可以在
mathfunc
中使用它,如您所愿。

使用
eval()
可能会导致a。使用
eval()
可能会导致a。数学表达式是否可以是一个普通的Python函数“
def(x):return x**2+3
还是必须是字符串?数学表达式可以是普通Python函数“
def(x):return x**2+3
还是必须是字符串?谢谢您的帮助,这正是我需要的。我需要更多地了解Symphy,它看起来很实用。谢谢你的帮助,这正是我需要的。我需要更多地了解Symphy,它看起来非常实用。谢谢你的帮助,这是我需要的例子。谢谢你的帮助,这是我需要的例子。