Как написать функцию с переменной извне?

Я надеюсь, что вы можете помочь. Я ищу способ написать функцию, которая вставляет один элемент позже. Позвольте мне показать вам пример:

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 Solutions collect form web for “Как написать функцию с переменной извне?”

Вам предлагается вернуть функцию, но вы возвращаете рассчитанное значение:

 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))) 
 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 
  • Правильное использование глобальных переменных в Python 3
  • abs () vs fabs () разность скоростей и преимущество fabs ()
  • Что такое соглашение об именах в Python для имен переменных и функций?
  • Оцениваются ли функции при передаче в качестве параметров?
  • Что более фундаментально: функции Python или объектные методы Python?
  • Почему я могу вызвать функцию перед ее определением, только с предупреждением?
  • Почему foo (* arg, x) не разрешено в Python?
  • Альтернативы Python для глобальных переменных
  • Python - лучший язык программирования в мире.