如何从外部编写带变量的函数?

时间:2016-10-29 01:16:06

标签: python function scope definition

我希望你能提供帮助。我正在寻找一种方法来编写一个稍后插入一个项目的函数。让我举个例子:

def general_poly(L):
        """ 
        L, a list of numbers (n0, n1, n2, ... nk)
        Returns a function, which when applied to a value x, returns the value 
        n0 * x^k + n1 * x^(k-1) + ... nk * x^0 
        """
        x = 1
        res = 0
        n = len(L)-1
        for e in range(len(L)):
            res += L[e]*x**n
            n -= 1
        return res

我想我可以在这里给x一个值,一旦我general_poly(L)(10),它就会被替换为x = 10,但显然它并不那么容易。我需要更改/添加什么才能使我的功能正常工作?函数如何知道,乘法是x?谢谢你的帮助,伙计们!

2 个答案:

答案 0 :(得分:8)

系统会要求您返回一个函数,但是您将返回计算值:

def general_poly(L):
    """ 
    L, a list of numbers (n0, n1, n2, ... nk)
    Returns a function, which when applied to a value x, returns the value 
    n0 * x^k + n1 * x^(k-1) + ... nk * x^0 
    """
    def inner(x):
        res = 0
        n = len(L)-1
        for e in range(len(L)):
            res += L[e]*x**n
            n -= 1
        return res
    return inner

现在general_poly(L)(10)会做你期望的事情,但如果你把它分配给一个值可能更有用,所以可以多次调用它,例如:

L = [...]
fn = general_poly(L)
print(fn(10))
print(fn(3))

您也可以将inner重写为:

def general_poly(L):
    return lambda x: sum(e*x**n for n, e in enumerate(reversed(L)))

答案 1 :(得分:0)

def general_poly (L):
    """ L, a list of numbers (n0, n1, n2, ... nk)
    Returns a function, which when applied to a value x, returns the value 
    n0 * x^k + n1 * x^(k-1) + ... nk * x^0 """

    def inner(x):
        L.reverse()
        return sum(e*x**L.index(e) for e in L)
    return inner