Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to write function with variable from the outside?

I hope you can help. I am looking for a way to write a function that inserts one item later. Let me show you an example:

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

I thought I could just give x a value here and once I do general_poly(L)(10) it will be replaced so that x = 10 but apparently it is not that easy. What do I have to change / add so that my function works? How does the function know, that the multiplication is the x? Thanks for your help, guys!

like image 857
Mickey Mahoney Avatar asked Feb 06 '23 19:02

Mickey Mahoney


1 Answers

You are being asked to return a function but you are returning the calculated value:

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

Now general_poly(L)(10) will do what you expect but it is probably more useful if you assign it to a value, so it can be called it multiple times, e.g.:

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

You could also rewrite inner to:

def general_poly(L):
    return lambda x: sum(e*x**n for n, e in enumerate(reversed(L)))
like image 59
AChampion Avatar answered Feb 08 '23 15:02

AChampion