2016-03-26 8 views
-3

make_averaged関数で定義したnum_samples変数を使用します。 fun_averagedで変数を使用するときは、upper levelの機能の範囲で変数を検索する必要があります。上位レベル関数の変数を使用する

while not num_samples == 0: 
    totalave = fn(*args) + totalave 
    num_samples -= 1 

へ:

for _ in range(num_samples): 
    totalave = fn(*args) + totalave 

が助けるべき

def make_averaged(fn, num_samples=1000): 
    def fun_averaged(*args) : 
     totalave = 0 
     savenum = num_samples 
     while not num_samples == 0: 
      totalave = fn(*args) + totalave 
      num_samples -= 1 
     avetagevalue = totalave/savenum 
     return avetagevalue 
    return fun_averaged 

は、しかし、私はエラー変更

while not samples1 == 0: 
UnboundLocalError: local variable 'samples1' referenced before assignment 
+0

ここでは1つの機能だけが簡単になるわけではありませんか? –

+1

示されているコードでは、エラーは発生していないようです。 –

+1

そこで 'samples1'はどこで定義しますか? – timgeb

答えて

0

を取得します。外部機能からnum_samplesにアクセスできますが、+=で割り当てることはできません。

私は、この場合のためにそれをお勧めしませんが、Pythonの3にあなたが意図し何を実際にnonlocalを使用することができます。

nonlocal num_samples 
while not num_samples == 0: 
    totalave = fn(*args) + totalave 
    num_samples -= 1 

それはfun_averagedの最初の呼び出しのために動作します。しかし、次回にfun_averagedと呼ぶと、num_samplesの値は0になります。

+0

私は外部機能を使用する必要がありますか?私は "make_averaged"内にあるので "fun_averaged(* args)"は "make_averaged"内の "num_samples"の値を検索すると考えました – Alex

+0

それを見ることはできますが、それを割り当てることはできません。 '+ ='を使うとすぐに 'num_samples'をローカル変数とみなします。 –

+0

ありがとうございました! – Alex

関連する問題