2016-10-29 2 views
4

도와 주시면 감사하겠습니다. 한 항목을 나중에 삽입하는 함수를 작성하는 방법을 찾고 있습니다. 내가 당신에게 예를 보여 드리죠 :외부에서 변수가있는 함수를 작성하는 방법은 무엇입니까?

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이라는 것을 어떻게 알 수 있습니까? 도와 줘서 고마워!

+1

'x '가 글로벌 인 경우, 파이썬에게'global x'를 통해 명시 적으로 알려줄 필요가 있습니다. –

답변

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))) 
+0

그것은 정말로 내가 뭘 원하는지, 감사합니다. 그러나 나는 여전히 혼란 스럽다 :'내부 '의 반환은 기본적으로'x '가 주어지면 내부 기능이 해결 될 수 있도록 설정을 반환한다. 그 맞습니까? 그렇다면 general_poly (L)은 general_poly의 def가 나온 후에'x'가 올 것임을 어떻게 알 수 있습니까? inner는 inner (x)처럼 def이기 때문에? –

+0

예,'general_poly'는 하나의 매개 변수 (x)를 취하는 함수를 리턴하는 하나의 param (L)의 함수입니다. 분명히 매개 변수의 실제 이름은 중요하지 않습니다. – AChampion

+0

감사합니다. –

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 
관련 문제