2016-10-29 8 views
4

私はあなたが助けてくれることを願っています。私は後で1つの項目を挿入する関数を書く方法を探しています。私はあなたに例を示しましょう:外部からの変数付き関数の書き方は?

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'を介してPythonに伝える必要があります。 –

答えて

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'が来ることをどのように知っていますか?インナーはインナー(x)としてdefですか? –

+0

はい、 'general_poly'は、1つのパラメータ(x)を取る関数を返す1つのパラメータ(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 
関連する問題