2017-06-29 7 views
1

すべての関数が同じでないように次のコードを書くにはどうすればよいですか?Pythonで関数の複数のバリエーションを返す方法

>>> def g(x): 
...  l = [] 
...  for i in range(1,10): 
...   def f(x): 
...    return x + i 
...   l.append(f) 
...  return l 

アイデアは、最初の機能は、Pythonですべてが目的であるので、第二x+2等がしかし、以前のすべての機能定義が上書きされx+1を返す場合g 9つの機能のリストを返すことであるべきです。これをどうすれば解決できますか?

+0

の関数を上書きしません。 – hurturk

+0

あなたのすべての機能は同じです:それらはすべて 'i'の現在の値を加えます。関数を呼び出すと、 'i'の現在の値は10になります。 – khelwood

答えて

3

これは私がここでの問題は、最終的な値ではなく、関数である `i`だと思う最終的なリスト

def make_f(x, i): 
    def f(): 
     return x + i 
    return f 


def g(x): 
    l = [] 
    for i in range(1, 10): 
     l.append(make_f(x, i)) 
    return l 

for f in g(10): 
    print f() 

11 
12 
13 
14 
15 
16 
17 
18 
19 
関連する問題